25. Automação com dados do Excel
Quando os dados são fornecidos no Excel como descrito em Links de dados do 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 gráfico específico com seus dados. Com PresentationFromTemplate
você usa seus dados para criar uma nova apresentação com base em um modelo do PowerPoint com os gráficos do think-cell vinculados aos intervalos de dados no 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 ou C#.
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:
http://support.microsoft.com/kb/245115
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:
Dim tcaddin As Object
Set tcaddin = Application.COMAddIns("thinkcell.addin").Object
- 25.1
- Atualizargráfico
- 25.2
- Apresentaçãoapartirdomodelo
25.1 Atualizargráfico
25.1.1 Assinatura
tcaddin.UpdateChart( _
pres As PowerPoint.Presentation, _
strName As String, _
rgData As Excel.Range, _
bTransposed As Boolean _
)
25.1.2 Descrição
Chamadas do Excel, essa função atualiza o gráfico strName
em pres
com os números contidos em rgData
. O intervalo rgData
deve estar em conformidade com o layout descrito em Criar gráfico a partir do Excel.
Observe que o objeto da apresentação pres
também pode ser usado para consultar uma faixa de slide em uma apresentação. Para obter mais informações, consulte:
http://msdn.microsoft.com/en-us/vba/powerpoint-vba/articles/slide-object-powerpoint
O nome do gráfico 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 Introdução à automação. O nome do gráfico tem que ser único dentro da apresentação ou faixa de slides definida pelo pres
.
Se o gráfico estiver vinculado a algum intervalo de dados do Excel, ao invocar essa função, o vínculo será quebrado. Depois, o gráfico não será vinculado a qualquer intervalo do Excel.
25.1.3 Exemplo
Para utilizar esta amostra, na janela Visual Basic for Applications do Excel, vá para Ferramentas, depois Referências e adicione a biblioteca de objetos do Microsoft PowerPoint.
' When Option Explicit appears in a file, you must
' explicitly declare all variables using the Dim
' or ReDim statements. If you attempt to use an
' undeclared variable name, an error occurs at
' compile time.
' Use Option Explicit to avoid incorrectly typing
' the name of an existing variable or to avoid
' confusion in code where the scope of the
' variable is not clear. If you do not use the
' Option Explicit statement, all undeclared
' variables are of Object type.
' http://msdn.microsoft.com/en-us/
' library/y9341s4f%28v=vs.80%29.aspx
Option Explicit
Sub UpdateChart_Sample()
' Get the range containing the new data
Dim rng As Excel.Range
Set rng = ActiveWorkbook.Sheets("Sheet1").Range("A1:D5")
' Get the think-cell add-in object
Dim tcaddin As Object
Set tcaddin = 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:\\template.pptx", _
' Untitled:=msoTrue)
' PowerPoint window invisible
Set pres = ppapp.Presentations.Open( _
Filename:="c:\\template.pptx", _
Untitled:=msoTrue, _
WithWindow:=msoFalse)
' The name "Chart1" must have been
' previously assigned to the chart using
' the control in the floating toolbar.
' The final argument indicates whether
' the data range is transposed or not.
Call tcaddin.UpdateChart(pres, "Chart1", rng, False)
' Save the updated presentation
pres.SaveAs ("c:\\template_updated.pptx")
pres.Close
ppapp.Quit
End Sub
O próximo exemplo mostra como usar UpdateChart
de C#.
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
// Open the Solution Explorer > right-click the project file > "Add Reference..." button and add he following references:
// .NET tab > Microsoft.Office.Interop.Excel 12.0.0.0
// .NET tab > Microsoft.Office.Interop.PowerPoint 12.0.0.0
// COM tab > Microsoft Office 14.0 Object Library
namespace ConsoleApplication_UpdateChart
{
class Program
{
static void Main()
{
Excel.Application xlapp = new Excel.Application();
xlapp.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://template.pptx", Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue);
object[] aobjArg = new object[] { (object)presentation, "Chart1", worksheet.get_Range("A1", "D3"), false };
Office.COMAddIn comaddin = xlapp.COMAddIns.Item("thinkcell.addin");
object objAddIn = comaddin.Object;
objAddIn.GetType().InvokeMember("UpdateChart", System.Reflection.BindingFlags.InvokeMethod, null, objAddIn, aobjArg);
presentation.SaveAs("C://template_updated.pptx");
presentation.Close();
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}
25.2 Apresentaçãoapartirdomodelo
25.2.1 Assinatura
tcaddin.PresentationFromTemplate( _
wb As Excel.Workbook, _
strTemplate As String, _
ppapp As PowerPoint.Application _
) As PowerPoint.Presentation
25.2.2 Descrição
Chamada do Excel, essa função aplica quaisquer vínculos de dados no wb
ao modelo com o nome de arquivo strTemplate
. 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 wb
da pasta de trabalho do Excel.
Todos os gráficos 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). A seguir, seus vínculos de dados são quebrados para evitar alterações a esses gráficos mais adiante.
Os gráficos 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ê quiser controlar as cores dos segmentos dos gráficos com o link do Excel, é possível definir o esquema de cores como Usar o preenchimento do Excel (consulte Esquema de cores). 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 a cor de fundo e o formato de número das células respectivas no Excel antes de chamar PresentationFromTemplate
.
25.2.3 Exemplo
Para utilizar esta amostra, na janela Visual Basic for Applications do Excel, vá para Ferramentas, depois Referências e adicione a biblioteca de objetos do Microsoft PowerPoint.
' When Option Explicit appears in a file, you must
' explicitly declare all variables using the Dim
' or ReDim statements. If you attempt to use an
' undeclared variable name, an error occurs at
' compile time.
' Use Option Explicit to avoid incorrectly typing
' the name of an existing variable or to avoid
' confusion in code where the scope of the
' variable is not clear. If you do not use the
' Option Explicit statement, all undeclared
' variables are of Object type.
' http://msdn.microsoft.com/en-us/
' library/y9341s4f%28v=vs.80%29.aspx
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("Sheet1").Cells(3, 2)
' Get the think-cell add-in object
Dim tcaddin As Object
Set tcaddin = 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
rng.Value = i
' Generate a new presentation based on the
' linked template.
Dim pres As PowerPoint.Presentation
Set pres = tcaddin.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:\\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