25. Automação com dados do Excel
Quando os dados são fornecidos no Excel, você pode usar as funções UpdateChart
e PresentationFromTemplate
para controlar programaticamente usando esses dados.
Com UpdateChart
você exporta a planilha de dados de um elemento específico com seus dados no Excel. Com PresentationFromTemplate
você usa seus dados para criar uma nova apresentação com base em um modelo do PowerPoint com os elementos do think-cell vinculados aos intervalos de dados no Excel, conforme descrito em 21. Links de dados do Excel.
A interface para as funções é integrada ao modelo de Automação do Office, portanto pode ser acessada a partir de qualquer linguagem com a qual seja possível programar o Office, como Visual Basic for Applications (VBA) ou C#. Consulte Introdução para instruções detalhadas.
O ponto de entrada no think-cell é o objeto de suplemento do think-cell. Pode ser acessado através da coleção Application.COMAddIns
. As chamadas ao think-cell sempre são ligadas tardiamente. Consulte a base de dados de conhecimento da Microsoft para obter uma explicação:
Usando ligação precoce e tardia na automação
Assim, o tipo de objeto do suplemento do think-cell é simplesmente Object
, sem nenhuma biblioteca de tipos nem referências a serem adicionadas. Basta adquirir o objeto, e já será possível fazer mais chamadas. Por exemplo, na VBA no Excel:
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
Na C#, você pode alcançar uma ligação tardia ao declarar a referência ao suplemento do think-cell como dynamic
; esse também é o tipo presumido pelo compilador ao declarar a referência como var
, então você pode simplesmente escrever:
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
Aqui xlapp
está uma referência a um objeto do Excel.Application
no qual o think-cell foi carregado.
- 25.1
- Atualizargráfico
- 25.2
- Apresentaçãoapartirdomodelo
25.1 Atualizargráfico
25.1.1 Assinatura
VBA
tcXlAddIn.UpdateChart( _
target As Object, _
strName As String, _
rgData As Excel.Range, _
bTransposed As Boolean _
)
C#
void tcXlAddIn.UpdateChart(
object target,
string strName,
Excel.Range rgData,
bool bTransposed
);
25.1.2 Descrição
Esta função atualiza todos os elementos no target
com nome strName
com os dados contidos no rgData
. Para que os dados sejam interpretados corretamente para gráficos, o intervalo rgData
deve estar alinhado ao seu layout da planilha de dados padrão, ou sua versão transposta; consulte também Criar gráfico a partir do Excel e Ajustando o layout de dados. A informação sobre se deve ser usada a versão padrão ou transposta é indicada pela configuração bTransposed
para false
ou true
, respectivamente. Para elementos que não são gráficos, tabelas por exemplo, o valor de bTransposed
é ignorado.
target
deve ser Presentation
ou SlideRange
, ou um único Slide
, Master
ou CustomLayout
.
O nome strName
não diferencia maiúsculas e minúsculas. Isso deve ter sido atribuído anteriormente no PowerPoint usando o controle de propriedade Nome de UpdateChart como descrito em 24. Introdução à automação.
Para garantir que os elementos corretos sejam direcionados, certifique-se de que eles sejam os únicos com seu Nome de UpdateChart configurado para strName
no objeto passado como pres
.
Se um elemento direcionado estiver vinculado a algum intervalo de dados do Excel, ao invocar essa função, o vínculo será quebrado. Depois, o elemento não será vinculado a qualquer intervalo do Excel.
25.1.3 Exemplos
Para usar esses exemplos, prepare uma apresentação conforme descrito no 24. Introdução à automação, e a salve como C:\Samples\UpdateChart\template.pptx
.
VBA
Para usar esta amostra adicione-a a um módulo e, uma pasta de trabalho do Excel.
Ela requer uma referência à biblioteca de objetos do Microsoft PowerPoint 16.0 (consulte Visual Basic for Applications para obter mais detalhes).
Ao executar UpdateChart_Sample
em uma pasta de trabalho, o gráfico no modelo de apresentação será atualizado com os dados contidos no intervalo A1:D5
da sua primeira planilha.
Option Explicit
Sub UpdateChart_Sample()
' Get the range containing the new data
Dim rng As Excel.Range
Set rng = ActiveWorkbook.Sheets(1).Range("A1:D5")
' Get the think-cell add-in object
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
' Get a PowerPoint instance. Hold on to this
' object as long as you want to access the
' generated presentations. There can only be a
' single PowerPoint instance. If there is no
' PowerPoint running, one will be started.
' Otherwise the existing one is used.
Dim ppapp As Object
Set ppapp = New PowerPoint.Application
Dim pres As PowerPoint.Presentation
' PowerPoint window visible
' Set pres = ppapp.Presentations.Open( _
' Filename:="C:\\Samples\\UpdateChart\\template.pptx", _
' Untitled:=msoTrue)
' PowerPoint window invisible
Set pres = ppapp.Presentations.Open( _
Filename:="C:\\Samples\\UpdateChart\\template.pptx", _
Untitled:=msoTrue, _
WithWindow:=msoFalse)
Call tcXlAddIn.UpdateChart(pres, "Chart1", rng, False)
' Save the updated presentation
pres.SaveAs ("C:\\Samples\\UpdateChart\\template_updated.pptx")
pres.Close
ppapp.Quit
End Sub
C#
Para usar esta amostra, insira-a no lugar do código no Program.cs
do modelo de projeto do aplicativo Console da C#.
São necessárias referências à biblioteca de objetos do Microsoft PowerPoint 16.0, biblioteca de objetos do Microsoft Excel 16.0 e biblioteca de objetos do Microsoft Office 16.0 (consulte C# para obter mais detalhes).
Ao executar o aplicativo resultante, o gráfico será atualizado no modelo de apresentação e exibirá uma única série chamada "Série 1", com valores 1, 2, 3, e o resultado será salvo como template_updated.pptx
.
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
namespace ConsoleApplication_UpdateChart
{
class Program
{
static void Main()
{
Excel.Application xlapp = new Excel.Application { Visible = true };
Excel.Workbook workbook = xlapp.Workbooks.Add(1);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
worksheet.Cells[3, 1] = "Series 1";
worksheet.Cells[3, 2] = 1;
worksheet.Cells[3, 3] = 2;
worksheet.Cells[3, 4] = 3;
PowerPoint.Application ppapp = new PowerPoint.Application();
PowerPoint.Presentation presentation = ppapp.Presentations.Open(
"C:\\Samples\\UpdateChart\\template.pptx",
Office.MsoTriState.msoFalse,
Office.MsoTriState.msoTrue
);
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
tcXlAddIn.UpdateChart(
presentation,
"Chart1",
worksheet.get_Range("A1", "D3"),
false
);
presentation.SaveAs("C:\\Samples\\UpdateChart\\template_updated.pptx");
presentation.Close();
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}
25.2 Apresentaçãoapartirdomodelo
25.2.1 Assinatura
VBA
tcXlAddIn.PresentationFromTemplate( _
wb As Excel.Workbook, _
strTemplate As String, _
ppapp As PowerPoint.Application _
) As PowerPoint.Presentation
C#
PowerPoint.Presentation tcXlAddIn.PresentationFromTemplate(
Excel.Workbook wb,
string strTemplate,
PowerPoint.Application ppapp
);
25.2.2 Descrição
Esta função usa os vínculos de dados entre a pasta de trabalho do Excel wb
e o modelo com nome de arquivo strTemplate
para instanciar o modelo atualizando os elementos vinculados com os dados dos intervalos ao quais estão vinculados. O resultado é uma nova apresentação dentro da instância do PowerPoint ppapp
.
strTemplate
pode ser um caminho inteiro ou relativo, que é então tomado para ser relativo à localização do arquivo da pasta de trabalho do Excel wb
.
Todos os elementos em strTemplate
que estão vinculados à pasta de trabalho wb
do Excel são atualizados (independentemente se estão definidos para atualização automática ou não). Na apresentação resultante, os vínculos de dados estão corrompidos para impedir que esses elementos sejam alterados no futuro.
Os elementos em strTemplate
, que são vinculados a pastas de trabalho do Excel que não wb
, são deixados sem modificação e ainda vinculados, para ser possível atualizar vínculos de várias pastas de trabalho do Excel, salvando o resultado dessa função como novo modelo e chamando novamente essa função com a próxima pasta de trabalho.
Se você deseja controlar as cores dos segmentos do gráfico ou a formatação das células da tabela com o link do Excel, você pode configurar o esquema de cores para Usar preenchimento da planilha de dados como preferência (consulte Esquema de cores) ou as opções de Usar preenchimento da planilha de dados... (consulte Formatar uma tabela), respectivamente. Da mesma forma, para controlar o formato de número com o link do Excel, configure-o como Usar formatação do Excel (veja Formato de número).
Certifique-se de definir as opções de formatação relevantes e o formato de número das células respectivas no Excel antes de chamar PresentationFromTemplate
.
25.2.3 Exemplos
Para usar essas amostras, primeiro crie uma apresentação contendo um gráfico empilhado vinculado ao intervalo G1:K4
da primeira planilha em uma pasta de trabalho do Excel, conforme explicado em Criar gráfico a partir do Excel. Salve a apresentação resultante como C:\Samples\PresentationFromTemplate\template.pptx
, e a pasta de trabalho como data.xlsx
, no mesmo diretório.
VBA
Para usar esta amostra, adicione-a ao módulo na pasta de trabalho data.xlsx
do Excel, preparada conforme explicado acima.
Ela requer uma referência à biblioteca de objetos do Microsoft PowerPoint 16.0 (consulte Visual Basic for Applications para obter mais detalhes).
Ao executar PresentationFromTemplate_Sample
, o valor na célula Sheet1!H3
, que está vinculado ao primeiro valor da primeira série de planilhas contidas em template.pptx
, de i=1
a 10
, será alterado, será criada uma nova apresentação com o gráfico no modelo atualizado, que passará a exibir esse valor, e que não está vinculado à pasta de trabalho, e será salvo como output_i.pptx
no mesmo diretório que do modelo.
Option Explicit
Sub PresentationFromTemplate_Sample()
' Get the range to modify. It is more efficient
' to do this once rather than within the loop.
Dim rng As Excel.Range
Set rng = ActiveWorkbook.Sheets(1).Cells(3, 8)
' Get the think-cell add-in object
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
' Get a PowerPoint instance. Hold on to this
' object as long as you want to access the
' generated presentations. There can only be a
' single PowerPoint instance. If there is no
' PowerPoint running, one will be started.
' Otherwise the existing one is used.
Dim ppapp As Object
Set ppapp = New PowerPoint.Application
Dim i As Integer
For i = 1 To 10
' Modify the range value.
' Note: Avoid selecting the cell prior to
' changing it. It is very slow and has
' undesirable side-effects.
' BAD:
' rng.Select
' ActiveWindow.Selection.Value = 0
' GOOD:
rng.Value = i
' Generate a new presentation based on the
' linked template.
Dim pres As PowerPoint.Presentation
Set pres = tcXlAddIn.PresentationFromTemplate( _
Excel.ActiveWorkbook, "template.pptx", ppapp _
)
' If you want to modify the new presentation
' before saving it this is the place to do it.
' Save the new presentation
pres.SaveAs "C:\Samples\PresentationFromTemplate\output_" & i & ".pptx"
' Explicitly close the presentation when we
' are done with it to free its memory.
' Letting the object go out of scope is not
' sufficient.
pres.Close
Next
End Sub
C#
Para usar esta amostra, insira-a no lugar do código no Program.cs
do modelo de projeto do aplicativo Console da C#.
São necessárias referências à biblioteca de objetos do Microsoft PowerPoint 16.0, biblioteca de objetos do Microsoft Excel 16.0 e biblioteca de objetos do Microsoft Office 16.0 (consulte C# para obter mais detalhes).
Ao executar o aplicativo resultante, o Excel abrirá e ficará visível, a pasta de trabalho data.xlsx
será carregada, o valor na célula H3
, que está vinculado ao primeiro valor da primeira série de planilhas contidas em template.pptx
, de i=1
a 10
, será alterado, será criada uma nova apresentação com o gráfico no modelo atualizado, que passará a exibir esse valor, e que não está vinculado à pasta de trabalho, e será salvo como output_i.pptx
no mesmo diretório que do modelo.
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication_PresentationFromTemplate
{
class Program
{
static void Main()
{
var xlapp = new Excel.Application { Visible = true };
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
var workbook = xlapp.Workbooks.Open("C:\\Samples\\PresentationFromTemplate\\data.xlsx");
var ppapp = new PowerPoint.Application();
for (var i = 1; i <= 10; ++i)
{
workbook.Sheets[1].Cells[3, 8] = i;
PowerPoint.Presentation presentation = tcXlAddIn.PresentationFromTemplate(
workbook,
"C:\\Samples\\PresentationFromTemplate\\template.pptx",
ppapp
);
presentation.SaveAs("C:\\Samples\\PresentationFromTemplate\\output" + i + ".pptx");
presentation.Close();
}
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}