Automatisation avec les données Excel

Sous Windows, vous pouvez utiliser les fonctions de l’API think-cell pour créer par programmation des présentations think-cell à partir de données d’Excel.

Introduction à l’automatisation avec les données Excel

Windows uniquement

L’automatisation Excel est particulièrement utile lorsque vous devez générer régulièrement des rapports volumineux sans mettre à jour manuellement les données à chaque fois. Pour des tâches ponctuelles ou de petite envergure, nous recommandons d’utiliser Créer des éléments à partir d’Excel.

Pour créer une copie d’un modèle PowerPoint et mettre à jour tous les éléments think-cell liés à un classeur Excel dans la présentation copiée (voir Créer des éléments à partir d’Excel), utilisez la fonction PresentationFromTemplate.

Pour mettre à jour uniquement certains éléments think-cell dans un modèle PowerPoint, qu’ils soient liés à Excel ou non, utilisez l’API UpdateBatch. UpdateBatch a remplacé UpdateChart (obsolète). Cependant, si votre code existant utilise UpdateChart, il continuera à fonctionner.

L’API think-cell et Office Automation

L’API think-cell est intégrée au modèle d’objet composant (COM) de Microsoft, vous pouvez donc accéder à l’API à partir de tout langage capable de piloter Office, tel que Visual Basic for Applications (VBA) ou C#. Pour des instructions sur l’utilisation de VBA et C#, consultez Découvrez l’API think-cell.

Le point d’entrée dans think-cell est l’objet de complément think-cell. Vous pouvez accéder à cet objet via la collection Application.COMAddIns. Les appels à think-cell utilisent toujours à liaison tardive (voir Microsoft Learn). Ainsi, le type de l’objet du complément think-cell est simplement Object, et il n’est pas nécessaire d’ajouter de bibliothèque ou de référence de type. Une fois l’objet obtenu, vous pouvez effectuer des appels. Par exemple, dans VBA dans Excel, utilisez le code suivant :

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

En C#, vous pouvez obtenir une liaison tardive en déclarant la référence à l’objet d’extension think-cell comme dynamic. Lorsque vous déclarez la référence comme var, le compilateur déduit que l’objet est de type dynamic, vous pouvez donc simplement utiliser le code suivant. Ici, xlapp est une référence à un objet Excel.Application qui charge think-cell.

var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;

Faire correspondre les mises en page de données Excel et de modèles

Pour que vos données s’affichent correctement dans le graphique correspondant, la disposition de vos données dans Excel doit correspondre à celle de la feuille de données du graphique dans le modèle (voir Transposer et modifier la disposition des données des plages liées). Par exemple, si vous ajoutez la ligne 100%= dans le graphique du modèle, think-cell interprète la deuxième ligne de vos données Excel comme les totaux servant à calculer les pourcentages.

Le tableau suivant récapitule les options courantes de mise en page des données, leur position dans la mise en page des données et leurs paramètres par défaut. Pour vérifier la structure des données d’un graphique en particulier, double-cliquez sur le graphique pour ouvrir sa feuille de données.

Data layout option

Contents

Position

Default setting

Series

Libellés des séries

Colonne 1

Sélectionné

Category

Libellés des catégories

Ligne 1

Sélectionné

100%=

Totaux pour les calculs de pourcentage

Ligne 2 (si Category sélectionnée)
Ligne 1 (si Category non sélectionnée)

Non sélectionné

Faire correspondre la mise en forme des éléments à Excel

Vous pouvez faire correspondre la mise en forme de vos éléments, tels que le format de nombre, le remplissage et la couleur de police, à la mise en forme dans le classeur Excel. Avant d’appeler PresentationFromTemplate ou UpdateBatch, dans votre classeur Excel, appliquez la mise en forme souhaitée. Ensuite, dans le modèle PowerPoint, faites correspondre le format de nombre, le format de police, le remplissage ou les bordures de l’élément au classeur Excel (voir Faire correspondre la mise en forme des éléments à la plage de données liée).

PresentationFromTemplate

Windows uniquement

La fonction PresentationFromTemplate crée une copie d’un modèle PowerPoint et met à jour tous les éléments think-cell de la présentation copiée qui sont liés à un classeur Excel. Pour plus d’informations sur les éléments think-cell liés, consultez la section Créer des éléments à partir d’Excel.

Signature de PresentationFromTemplate

VBA

tcXlAddIn.PresentationFromTemplate( _ 
	Workbook As Excel.Workbook, _ 
	Template As String, _ 
	PpApplication As PowerPoint.Application _ 
) As PowerPoint.Presentation

C#

PowerPoint.Presentation tcXlAddIn.PresentationFromTemplate(
	Excel.Workbook Workbook,
	string Template,
	PowerPoint.Application PpApplication
);

Description de PresentationFromTemplate

PresentationFromTemplate prend les arguments suivants :

  • Workbook désigne le classeur Excel qui contient vos données.
  • Template fait référence au modèle PowerPoint qui contient les éléments que vous souhaitez renseigner. Pour qu’un élément soit rempli avec des données, il doit être lié à une plage dans Workbook (voir Créer des éléments à partir d’Excel). Template peut spécifier un chemin relatif par rapport à l’emplacement de Workbook ou un chemin absolu.
  • PpApplication fait référence à l’instance PowerPoint qui génère la nouvelle présentation.

PresentationAsTemplate crée une copie du Template et met à jour tous les éléments de la présentation copiée qui sont liés au Workbook, qu’ils soient configurés ou non pour une mise à jour automatique (voir Gérer les données dans les éléments liés).

Dans la nouvelle présentation, PresentationFromTemplate rompt volontairement les liens Excel des éléments mis à jour pour éviter toute mise à jour involontaire ultérieure. Cependant, les éléments non mis à jour conservent leurs liens Excel. Cela signifie que vous pouvez mettre à jour les liens à partir de plusieurs classeurs Excel. Pour ce faire, après avoir créé votre nouvelle présentation, appelez de nouveau PresentationFromTemplate avec le classeur suivant en utilisant la présentation générée comme modèle.

Exemples de PresentationFromTemplate

Pour utiliser ces exemples, créez tout d’abord une présentation avec un graphique à colonnes empilées lié à la plage G1:K4 de la première feuille dans un classeur Excel (voir Créer des graphiques à partir d’Excel). Enregistrez la présentation obtenue sous C:\Samples\PresentationFromTemplate\template.pptx, et le classeur sous data.xlsx dans le même répertoire.

VBA

Dans cet exemple, dans Sheet1, la procédure PresentationFromTemplate_Sample() modifie la valeur de H3 de i=1 à 10. H3 est lié à la première valeur de la première série du graphique à colonnes empilées. Pour chaque nouvelle valeur de H3, PresentationFromTemplate_Sample() effectue les actions suivantes :

  1. Fait une copie de template.pptx.
  2. Dans la présentation copiée, met à jour le graphique avec la nouvelle valeur.
  3. Supprime le lien Excel du graphique.
  4. Enregistre la nouvelle présentation dans le même répertoire que le modèle, sous output_i.pptx.

Pour utiliser cet exemple, dans le classeur Excel data.xlsx que vous avez créé, ajoutez un module contenant la procédure suivante. Le module doit inclure une référence à Microsoft PowerPoint 16.0 Object Library (voir Visual Basic for Applications).

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 start.
	' 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#

Dans cet exemple, le programme ouvre Excel et charge data.xlsx. Ensuite, dans Sheet1, le programme change la valeur de H3 de i=1 à 10. H3 est lié à la première valeur de la première série du graphique à colonnes empilées. Pour chaque nouvelle valeur de H3, le programme effectue les actions suivantes :

  1. Fait une copie de template.pptx.
  2. Dans la présentation copiée, met à jour le graphique avec la nouvelle valeur.
  3. Supprime le lien Excel du graphique.
  4. Enregistre la nouvelle présentation dans le même répertoire que le modèle, sous output_i.pptx.

Pour utiliser cet exemple, dans le modèle de projet Console App C#, remplacez le code dans Program.cs par le code suivant. Le programme nécessite des références à Microsoft PowerPoint 16.0 Object Library, à Microsoft Excel 16.0 Object Library et à Microsoft Office 16.0 Object Library (voir C#).

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();
		}
	}
}

UpdateBatch

Windows uniquement

Avec l’API UpdateBatch, spécifiez quels éléments think-cell du modèle PowerPoint doivent être mis à jour avec de nouvelles données Excel. Vous pouvez mettre à jour les éléments, qu’ils soient liés à Excel ou non.

UpdateBatch a remplacé UpdateChart (obsolète). Bien que le code existant qui utilise UpdateChart continue de fonctionner, nous vous recommandons d’utiliser UpdateBatch à la place :

  • Les nouvelles fonctionnalités, telles que le remplissage d’images de tableaux avec des données Excel (voir Insérer des images de tableau), sont uniquement disponibles dans UpdateBatch.
  • Avec les versions récentes de think-cell, UpdateChart peut être très lent, en particulier pour les grandes présentations.

Signatures de UpdateBatch

VBA

tcXlAddIn.CreateUpdate() As Object

tcUpdate.AddRangeData(
	Target As Object, _
	Name As String, _
	Range As Excel.Range, _
	Transposed As Boolean _
)

tcUpdate.AddRangeImage(
	Target As Object, _
	Name As String, _
	Range As Excel.Range _
)

tcUpdate.Send()

C#

object tcXlAddIn.CreateUpdate();

void tcUpdate.AddRangeData(
	object Target,
	string Name,
	Excel.Range Range,
	bool Transposed
);

void tcUpdate.AddRangeImage(
	object Target,
	string Name,
	Excel.Range Range
);

void tcUpdate.Send();

Description de UpdateBatch

UpdateBatch contient les fonctions suivantes :

  • CreateUpdate crée un objet qui stocke l’ensemble des éléments à mettre à jour et leurs plages de données Excel associées.
  • AddRangeData planifie une mise à jour pour un graphique, un tableau, un champ de texte d’automatisation, une Harvey Ball, une case à cocher ou une image à remplir avec des données Excel.
  • AddRangeImage planifie une mise à jour pour une image de tableau à remplir avec des données Excel (voir Insérer des images de tableau).
  • Send collecte les données Excel et les envoie à PowerPoint pour créer la présentation. Si votre code cible des éléments liés à Excel dans votre modèle PowerPoint, ces liens seront rompus (voir Créer des éléments à partir d’Excel).

AddRangeData et AddRangeImage prennent les arguments suivants :

  • Target fait référence au modèle PowerPoint qui contient les éléments que vous souhaitez renseigner. Target peut être un fichier Presentation, SlideRange, Slide, Master ou CustomLayout.
  • Name fait référence à un élément disposant d’un nom AddRangeData ou AddRangeImage. Avant d’exécuter UpdateBatch, vous devez attribuer le nom dans le modèle PowerPoint à l’aide de AddRangeData Name ou AddRangeImage Name (voir Créer des modèles PowerPoint pour l’automatisation des rapports). Les noms sont ne tiennent pas compte de la casse. Si deux éléments d’une même Target portent le même nom, think-cell les remplit automatiquement avec les mêmes données.
  • Range fait référence à la plage Excel contenant les données de l’élément.
  • Transposed (AddRangeData uniquement) : Pour permuter l’orientation des lignes et des colonnes dans la feuille de données de l’élément mis à jour (voir Transposer et modifier la disposition des données des plages liées), définissez Transposed sur True. Si l’orientation des données de l’élément correspond à celle des données Excel, définissez Transposed sur False.

Exemples de UpdateBatch

Les exemples de code VBA et C# suivants mettent à jour trois éléments dans le modèle PowerPoint à partir des données de la première feuille d’un classeur Excel. Les exemples enregistrent la présentation générée sous template_updated.pptx.

Pour utiliser ces exemples, créez un modèle PowerPoint avec des éléments think-cell et un classeur Excel contenant les données à insérer.

Pour créer le modèle PowerPoint, procédez comme suit :

  1. Créez une présentation PowerPoint avec un titre de diapositive et un graphique comme décrit dans Exemple de modèle PowerPoint.
  2. Dans la présentation, ajoutez une image d’un tableau (voir Insérer des images de tableau).
  3. Ouvrez la mini barre d’outils du tableau. Dans AddRangeImage Name, saisissez TableAsImage1. Sélectionnez Entrée.
  4. Enregistrez la présentation sous C:\Samples\UpdateBatch\template.pptx.

Pour créer le classeur Excel, procédez comme suit :

  1. Ouvrez un classeur Excel.
  2. Dans A1, saisissez un titre de diapositive.
  3. Dans A2:D5, saisissez les données du graphique. Assurez-vous que la disposition des données dans Excel correspond à celle de la feuille de données du graphique dans le modèle PowerPoint (voir Faire correspondre les mises en page de données Excel et de modèles).
  4. Dans A7:D10, saisissez les données du tableau. Toute mise en forme appliquée au tableau, comme les remplissages ou les bordures, apparaîtra dans la nouvelle présentation.
  5. Enregistrez le classeur dans C:\Samples\UpdateBatch\data.xlsx.

Lors de la définition des chemins dans vos procédures UpdateBatch, utilisez une double barre oblique inverse (\\) comme séparateur de répertoires.

VBA

Pour utiliser cet exemple de code, dans le classeur Excel que vous avez créé, ajoutez un module contenant la procédure suivante. Le module doit inclure une référence à la Microsoft PowerPoint 16.0 Object Library. Pour plus d’informations, consultez Visual Basic for Applications.

Option Explicit

Sub UpdateBatch_Sample()
	
	' Get the ranges that contain the new data
	Dim rngTitle As Excel.Range
	Set rngTitle = ActiveWorkbook.Sheets(1).Range("A1")
	Dim rngChart As Excel.Range
	Set rngChart = ActiveWorkbook.Sheets(1).Range("A2:D5")
	Dim rngTableAsImage As Excel.Range
	Set rngTableAsImage = ActiveWorkbook.Sheets(1).Range("A7:D10")

	' Get the think-cell add-in object
	Dim tcXlAddIn As Object
	Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object

	' Get a PowerPoint instance. Hold onto this object as long as
	' you want to access the new presentation. There can only be one
	' PowerPoint instance. If there is no instance, the script will
	' start one. Otherwise, the script uses the existing instance.
	Dim ppapp As Object
	Set ppapp = New PowerPoint.Application

	Dim pres As PowerPoint.Presentation

	' When the script ends, this code opens the new presentation
	' so that you can edit it further. To keep the presentation open,
	' also remove pres.Close and ppapp.Quit.
	' Set pres = ppapp.Presentations.Open( _
	' 	Filename:="C:\\Samples\\UpdateBatch\\template.pptx", _
	' 	Untitled:=msoTrue _
	' )

	' When the script ends, this code does not open the new presentation.
	Set pres = ppapp.Presentations.Open( _
		Filename:="C:\\Samples\\UpdateBatch\\template.pptx", _
		Untitled:=msoTrue, _
		WithWindow:=msoFalse _
	)

	Dim tcUpdate As Object
	Set tcUpdate = tcXlAddIn.CreateUpdate
          
	Call tcUpdate.AddRangeData(pres, "Title", rngTitle, False)
	Call tcUpdate.AddRangeData(pres, "Chart1", rngChart, False)
	Call tcUpdate.AddRangeImage(pres, "TableAsImage1", rngTableAsImage)
	Call tcUpdate.Send

	pres.SaveAs("C:\\Samples\\UpdateBatch\\template_updated.pptx")
	pres.Close

	ppapp.Quit

End Sub

C#

Pour utiliser cet exemple de code, dans le modèle de projet Console App C#, remplacez le code dans Program.cs par le code suivant.

Le programme nécessite des références à Microsoft PowerPoint 16.0 Object Library, à Microsoft Excel 16.0 Object Library et à Microsoft Office 16.0 Object Library. Pour plus d’informations, consultez C#.

using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;

namespace ConsoleApplication_UpdateBatch
{
	class Program
	{
		static void Main()
		{
			
			PowerPoint.Application ppapp = new PowerPoint.Application();
			PowerPoint.Presentation presentation = ppapp.Presentations.Open(
				"C:\\Samples\\UpdateBatch\\template.pptx",
				Office.MsoTriState.msoFalse,
				Office.MsoTriState.msoTrue
			);
			
			Excel.Application xlapp = new Excel.Application { Visible = true };
			Excel.Workbook workbook = xlapp.Workbooks.Open(
				"C:\\Samples\\UpdateBatch\\data.xlsx",
				Office.MsoTriState.msoFalse,
				Office.MsoTriState.msoTrue
			);
			Excel.Worksheet worksheet = workbook.Sheets[1];
			
			var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
			var tcUpdate = tcXlAddIn.CreateUpdate();
			
			tcUpdate.AddRangeData(
				presentation,
				"SlideTitle",
				worksheet.get_Range("A1"),
				true
			);
			
			tcUpdate.AddRangeData(
				presentation,
				"Chart1",
				worksheet.get_Range("A2", "D5"),
				true
			);
			
			tcUpdate.AddRangeImage(
				presentation,
				"TableAsImage1",
				worksheet.get_Range("A7", "D10")
			);
			
			tcUpdate.Send();
			
			presentation.SaveAs("C:\\Samples\\UpdateBatch\\template_updated.pptx");
			presentation.Close();
			ppapp.Quit();
			
			workbook.Close(false);
			xlapp.Quit();
		}
	}
}

UpdateChart (obsolète)

Windows uniquement

UpdateChart met à jour la feuille de données d’un élément spécifique contre vos données Excel.

UpdateBatch a remplacé UpdateChart (voir UpdateBatch). Bien que le code existant qui utilise UpdateChart continue de fonctionner, nous vous recommandons d’utiliser UpdateBatch pour le nouveau code à la place :

  • Les nouvelles fonctionnalités, telles que le remplissage d’images de tableaux avec des données Excel (voir Insérer des images de tableau), sont uniquement disponibles dans UpdateBatch.
  • Avec les versions récentes de think-cell, UpdateChart peut être très lent, en particulier pour les grandes présentations.

Signature de UpdateChart

VBA

tcXlAddIn.UpdateChart( _
	Target As Object, _
	ChartName As String, _
	Range As Excel.Range, _
	Transposed As Boolean _
)

C#

void tcXlAddIn.UpdateChart(
	object Target,
	string ChartName,
	Excel.Range Range,
	bool Transposed
);