Programmation de think-cell

Il est possible d’accéder à certaines fonctions de think-cell par programmation. Étant intégrée au modèle Office Automation, l’interface est accessible avec tout langage permettant de programmer Office, tel que VBA (Visual Basic for Applications) ou C#.

Le point d’entrée dans think-cell est l’objet complément think-cell, accessible via la collection Application.COMAddIns. Les appels à think-cell sont toujours à liaison tardive. Pour plus d’explications, reportez-vous à la base de connaissances de Microsoft :

http://support.microsoft.com/kb/245115

Ainsi, le type de l’objet complément think-cell est simplement Object, et il n’existe aucune bibliothèque ou référence de types à ajouter. Il suffit d’acquérir l’objet pour être en mesure de l’appeler :

Dim tcaddin As Object 
Set tcaddin = _ 
    Application.COMAddIns("thinkcell.addin").Object

Les sections suivantes décrivent les fonctionnalités disponibles.

E1
UpdateChart
E2
PresentationFromTemplate

E1 UpdateChart

E1.1 UpdateChart Name, contrôle de propriété

Dans la barre d’outils flottante d’un graphique (voir Mise en forme et style), vous pouvez définir un nom arbitraire et unique permettant d’identifier le graphique lorsque vous appelez la fonction UpdateChart, afin de mettre à jour les données de ce dernier.

E1.2 Signature

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

E1.3 Description

Cette fonction met à jour le graphique strName dans pres avec les nombres contenus dans rgData. La plage rgData doit être conforme à la structure décrite dans Création d’un graphique à partir d’Excel.

Le nom du graphique strName ne tient pas compte de la casse. Il doit avoir été attribué au préalable dans PowerPoint à l’aide du contrôle de propriété UpdateChart Name décrit ci-dessus.

Si le graphique est lié à une plage de données Excel lors de l’invocation de cette fonction, le lien est interrompu. après quoi le graphique n’est plus lié à aucune plage Excel.

E1.4 Exemple

Pour utiliser cet exemple, dans la fenêtre Visual Basic pour Applications d’Excel, sélectionnezOutils, puis Références et ajoutez la bibliothèque d’objets 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(); 
    } 
  } 
}

FIGURE E.1: UpdateChart exemple en C#

E2 PresentationFromTemplate

E2.1 Signature

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

E2.2 Description

Cette fonction applique toute liaison de données dans wb au modèle ayant le nom de fichier strTemplate. Il en résulte une nouvelle présentation dans l’instance PowerPoint ppapp.

strTemplate peut être un chemin complet ou un chemin relatif qui est alors indiqué par rapport à l’emplacement du fichier wb du classeur Excel.

Tous les graphiques dans strTemplate liés au classeur Excel wb sont mis à jour (que l’option de mise à jour automatique soit activée ou non). Ensuite, leurs liaisons de données sont interrompues afin d’éviter toute autre modification de ces graphiques.

Les graphiques dans strTemplate qui sont liés à des classeurs Excel autres que wb ne sont pas modifiés et restent liés. Il est donc possible de mettre à jour des liaisons à partir de plusieurs classeurs Excel, en enregistrant le résultat de cette fonction en tant que nouveau modèle et en la rappelant avec le classeur suivant.

Si vous souhaitez contrôler les couleurs des segments du diagramme avec le lien Excel, vous pouvez régler le modèle de couleurs sur Utiliser le remplissage Excel en superposition (voir Jeu de couleurs). De même, pour contrôler le format des nombres avec la liaison Excel, activez l’option Format Excel (voir Format des nombres). Veillez à définir la couleur d’arrière-plan et le format des nombres des cellules respectives dans Excel avant d’appeler PresentationFromTemplate.

E2.3 Exemple

Pour utiliser cet exemple, dans la fenêtre Visual Basic pour Applications d’Excel, sélectionnezOutils, puis Références et ajoutez la bibliothèque d’objets 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