Programar o think-cell

Algumas funções do think-cell podem ser acessadas de forma programática. A interface é 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

As seções a seguir descrevem a funcionalidade disponível.

E1
UpdateChart
E2
PresentationFromTemplate

E1 UpdateChart

E1.1 Controle de propriedade de nome UpdateChart

Disponível na barra de ferramentas flutuante de um gráfico (consulte Formatação e estilo), você pode definir um nome arbitrário e único para identificar o gráfico ao chamar a função UpdateChart para atualizar os dados do gráfico.

E1.2 Assinatura

tcaddin.UpdateChart( _ 
    pres As PowerPoint.Presentation, _ 
    strName As String, _ 
    rgData As Excel.Range, _ 
    bTransposed As Boolean _ 
)

E1.3 Descrição

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 um gráfico a partir do Excel.

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 UpdateChart descrito acima.

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.

E1.4 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:\\example.pptx", Untitled:=msoTrue)

   ' PowerPoint window invisible
   Set pres = ppapp.Presentations.Open( _
    Filename:="c:\\example.pptx", Untitled:=msoTrue, _
    WithWindow:=msoFalse)

   ' The name "No1" 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, "No1", rng, False)

   ' Save the updated presentation
   pres.SaveAs ("c:\\example_updated.pptx")
   pres.Close

   ppapp.Quit
End Sub

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://test.pptx", Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue); 
 
      object[] aobjArg = new object[] { (object)presentation, "ChartNo1", 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://test_updated.pptx"); 
      presentation.Close(); 
      ppapp.Quit(); 
 
      workbook.Close(false); 
      xlapp.Quit(); 
    } 
  } 
}

Figura E.1: UpdateChart exemplo em C#

E2 PresentationFromTemplate

E2.1 Assinatura

tcaddin.PresentationFromTemplate( _ 
    wb As Excel.Workbook, _ 
    strTemplate As String, _ 
    ppapp As PowerPoint.Application _ 
) As PowerPoint.Presentation

E2.2 Descrição

Essa função aplica qualquer vínculo 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 vínculo do Excel, defina-o como Formato do Excel (consulte Formato do 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.

E2.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