Automatisation avec les données Excel
- Page d'accueil
- Ressources
- Manuel de l’utilisateur
- think-cell Charts : Visualisation des données
- Automatisation avancée des rapports
- 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
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) |
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
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 :
Workbookdésigne le classeur Excel qui contient vos données.Templatefait 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 dansWorkbook(voir Créer des éléments à partir d’Excel).Templatepeut spécifier un chemin relatif par rapport à l’emplacement deWorkbookou un chemin absolu.PpApplicationfait 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 :
- Fait une copie de
template.pptx. - Dans la présentation copiée, met à jour le graphique avec la nouvelle valeur.
- Supprime le lien Excel du graphique.
- 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 :
- Fait une copie de
template.pptx. - Dans la présentation copiée, met à jour le graphique avec la nouvelle valeur.
- Supprime le lien Excel du graphique.
- 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
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,
UpdateChartpeut ê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 :
CreateUpdatecrée un objet qui stocke l’ensemble des éléments à mettre à jour et leurs plages de données Excel associées.AddRangeDataplanifie 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.AddRangeImageplanifie une mise à jour pour une image de tableau à remplir avec des données Excel (voir Insérer des images de tableau).Sendcollecte 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 :
Targetfait référence au modèle PowerPoint qui contient les éléments que vous souhaitez renseigner.Targetpeut être un fichierPresentation,SlideRange,Slide,MasterouCustomLayout.Namefait référence à un élément disposant d’un nomAddRangeDataouAddRangeImage. Avant d’exécuterUpdateBatch, 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êmeTargetportent le même nom, think-cell les remplit automatiquement avec les mêmes données.Rangefait référence à la plage Excel contenant les données de l’élément.Transposed(AddRangeDatauniquement) : 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éfinissezTransposedsurTrue. Si l’orientation des données de l’élément correspond à celle des données Excel, définissezTransposedsurFalse.
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 :
- Créez une présentation PowerPoint avec un titre de diapositive et un graphique comme décrit dans Exemple de modèle PowerPoint.
- Dans la présentation, ajoutez une image d’un tableau (voir Insérer des images de tableau).
- Ouvrez la mini barre d’outils du tableau. Dans AddRangeImage Name, saisissez
TableAsImage1. Sélectionnez Entrée. - Enregistrez la présentation sous
C:\Samples\UpdateBatch\template.pptx.
Pour créer le classeur Excel, procédez comme suit :
- Ouvrez un classeur Excel.
- Dans A1, saisissez un titre de diapositive.
- 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).
- 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.
- 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)
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,
UpdateChartpeut ê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
);