Automatisierung mit Excel-Daten
- Startseite
- Ressourcen
- Benutzerhandbuch
- think-cell Charts: Datenvisualisierung
- Fortschrittliche Berichtsautomatisierung
- Automatisierung mit Excel-Daten
Unter Windows können Sie think-cell API-Funktionen verwenden, um think-cell Präsentationen mit Daten aus Excel programmgesteuert zu erstellen.
Einführung in die Automatisierung mit Excel-Daten
Die Excel-Automatisierung ist besonders vorteilhaft, wenn Sie regelmäßig umfangreiche Berichte erstellen müssen, ohne dass jedes Mal eine manuelle Aktualisierung der Daten erforderlich ist. Für kleinere oder Ad-hoc-Diagrammaufgaben empfehlen wir die Verwendung von Elemente aus Excel erstellen.
Um eine Kopie einer PowerPoint-Vorlage zu erstellen und alle think-cell Elemente in der kopierten Präsentation zu aktualisieren, die mit einer Excel-Arbeitsmappe verknüpft sind (siehe Elemente aus Excel erstellen), verwenden Sie die PresentationFromTemplate-Funktion.
Um bestimmte think-cell Elemente in einer PowerPoint-Vorlage zu aktualisieren, unabhängig davon, ob sie mit Excel verknüpft sind, verwenden Sie die UpdateBatch-API. UpdateBatch hat UpdateChart ersetzt (veraltet). Wenn Ihr bestehender Code jedoch UpdateChart verwendet, funktioniert dieser Code weiterhin.
Die think-cell API und Office Automation
Die think-cell API ist in das Component Object Model (COM) von Microsoft integriert, sodass Sie von jeder Sprache, mit der Sie Office programmieren können, wie beispielsweise Visual Basic for Applications (VBA) oder C#, auf die API zugreifen können. Anweisungen zur Verwendung von VBA und C#, siehe Erste Schritte mit der think-cell API.
Der Einstiegspunkt in think-cell ist das think-cell Add-In-Objekt. Sie können über die Application.COMAddIns-Sammlung auf das Objekt zugreifen. Aufrufe in think-cell sind immer spät gebunden (siehe Microsoft Learn). Der Typ des think-cell Add-In-Objekts ist somit einfach Object und es muss keine Typenbibliothek oder Referenz hinzugefügt werden. Sobald Sie sich das Objekt abgerufen haben, können Sie es aufrufen. Verwenden Sie beispielsweise in VBA in Excel den folgenden Code:
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
In C# können Sie eine späte Bindung erreichen, indem Sie die Referenz auf das think-cell Add-In-Objekt deklarieren als dynamic. Wenn Sie die Referenz als var deklarieren, schließt der Compiler, dass das Objekt vom Typ dynamic ist, sodass Sie einfach den folgenden Code verwenden können. Hier ist xlapp eine Referenz auf ein Excel.Application-Objekt, das think-cell lädt.
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
Excel- und Vorlagendatenlayouts abgleichen
Um Ihre Daten korrekt im entsprechenden Diagramm anzuzeigen, muss das Datenlayout in Excel mit dem Datenblattlayout der Vorlage übereinstimmen (siehe Datenlayout von verknüpften Bereichen transponieren und bearbeiten). Wenn Sie beispielsweise die Zeile 100%= im Vorlagen-Diagramm hinzufügen, interpretiert think-cell die zweite Zeile der Excel-Daten als Summen, aus denen die Prozentsätze berechnet werden.
Die folgende Tabelle fasst gängige Datenlayoutoptionen, ihre Position im Datenlayout und ihre Standardeinstellung zusammen. Um das Datenlayout eines bestimmten Diagramms zu überprüfen, doppelklicken Sie auf das Diagramm, um dessen Datenblatt zu öffnen.
|
Data layout option |
Contents |
Position |
Default setting |
|---|---|---|---|
|
Series |
Serienbeschriftungen |
Spalte 1 |
Ausgewählt |
|
Category |
Kategoriebeschriftungen |
Zeile 1 |
Ausgewählt |
|
100%= |
Summen für Prozentberechnungen |
Zeile 2 (falls Category ausgewählt) |
Nicht ausgewählt |
Elementformatierung an Excel anpassen
Sie können die Formatierung Ihrer Elemente – wie Zahlenformat, Füllung und Schriftart – an die Formatierung in der Excel-Arbeitsmappe anpassen. Bevor Sie PresentationFromTemplate oder UpdateBatch aufrufen, übernehmen Sie die gewünschte Formatierung in Ihrer Excel-Arbeitsmappe. Passen Sie dann in der PowerPoint-Vorlage die Zahlenformatierung, Schriftart, Füllung oder Rahmen der Elemente an die Excel-Arbeitsmappe an (siehe Elementformatierung an den verknüpften Datenbereich anpassen).
PräsentationAusVorlage
Die Funktion PresentationFromTemplate erstellt eine Kopie einer PowerPoint-Vorlage und führt für alle think-cell Elemente in der kopierten Präsentation, die eine Verknüpfung zu einer Excel-Arbeitsmappe aufweisen, eine Aktualisierung durch. Weitere Informationen zu verknüpften think-cell Elementen siehe Elemente aus Excel erstellen.
PresentationAusVorlage Signatur
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
);
PräsentationAusVorlage Beschreibung
PresentationFromTemplate nimmt die folgenden Argumente an:
Workbookbezieht sich auf die Excel-Arbeitsmappe, die Ihre Daten enthält.Templatebezieht sich auf die PowerPoint-Vorlage, die die Elemente enthält, die Sie mit Daten füllen möchten. Um ein Element mit Daten zu füllen, muss es mit einem Bereich inWorkbook(siehe Elemente aus Excel erstellen) über eine Verknüpfung verbunden sein.Templatekann einen relativen Pfad vom Speicherort vonWorkbookoder einen absoluten Pfad angeben.PpApplicationbezieht sich auf die PowerPoint-Instanz, die die neue Präsentation generiert.
PresentationAsTemplate erstellt eine Kopie von Template und aktualisiert alle Elemente in der kopierten Präsentation, die mit Workbook verknüpft sind, unabhängig davon, ob Sie die Elemente so eingestellt haben, dass sie automatisch eine Aktualisierung erhalten (siehe Daten in verknüpften Elementen verwalten).
In der neuen Präsentation werden die aktualisierten Elemente mit Excel-Verknüpfungen von PresentationFromTemplate absichtlich unterbrochen, um unbeabsichtigte weitere Aktualisierungen zu verhindern. Elemente, die von der Funktion nicht aktualisiert werden, behalten jedoch ihre Excel-Verknüpfungen bei. Das bedeutet, dass Sie Aktualisierungen von Verknüpfungen aus mehreren Excel-Arbeitsmappen vornehmen können. Rufen Sie dazu nach dem Erstellen Ihrer neuen Präsentation PresentationFromTemplate erneut mit Ihrer nächsten Arbeitsmappe auf und verwenden Sie die soeben erstellte Präsentation als Vorlage.
PräsentationAusVorlage Beispiel
Um diese Beispiele zu verwenden, erstellen Sie zunächst eine Präsentation mit einem gestapelten Säulendiagramm, das mit Bereich G1:K4 in der ersten Tabelle in einer Excel-Arbeitsmappe verknüpft ist, (siehe Diagramme aus Excel erstellen). Speichern Sie die Präsentation als C:\Samples\PresentationFromTemplate\template.pptx und die Arbeitsmappe als data.xlsx im gleichen Ordner.
VBA
In diesem Beispiel ändert das Verfahren PresentationFromTemplate_Sample() in Sheet1 den Wert von H3 von i=1 auf 10. H3 ist mit dem ersten Wert in der ersten Serie des gestapelten Säulendiagramms über eine Verknüpfung verbunden. Für jeden neuen Wert von H3 führt PresentationFromTemplate_Sample() Folgendes aus:
- Erstellt eine Kopie von
template.pptx. - In der kopierten Präsentation wird das Diagramm mit dem neuen Wert einer Aktualisierung unterzogen.
- Unterbricht die Excel-Verknüpfung.
- Speichert die neue Präsentation im selben Verzeichnis wie die Vorlage unter
output_i.pptx.
Um dieses Beispiel zu verwenden, erstellen Sie in der zuvor erstellten Excel-Arbeitsmappe data.xlsx ein Modul mit der folgenden Vorgehensweise. Das Modul erfordert eine Referenz auf Microsoft PowerPoint 16.0 Object Library (siehe 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#
In diesem Beispiel öffnet das Programm Excel und lädt data.xlsx. Anschließend ändert das Programm in Sheet1 den Wert von H3 von i=1 auf 10. H3 ist mit dem ersten Wert in der ersten Serie des gestapelten Säulendiagramms über eine Verknüpfung verbunden. Für jeden neuen Wert von H3 führt das Programm Folgendes aus:
- Erstellt eine Kopie von
template.pptx. - In der kopierten Präsentation wird das Diagramm mit dem neuen Wert einer Aktualisierung unterzogen.
- Unterbricht die Excel-Verknüpfung.
- Speichert die neue Präsentation im selben Verzeichnis wie die Vorlage unter
output_i.pptx.
Um dieses Beispiel zu verwenden, ersetzen Sie in der C#-Console App-Projektvorlage den Code in Program.cs durch den folgenden Code. Das Programm erfordert Referenzen auf Microsoft PowerPoint 16.0 Object Library, Microsoft Excel 16.0 Object Library und Microsoft Office 16.0 Object Library (siehe 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();
}
}
}
Batch aktualisieren
Mit der UpdateBatch-API legen Sie fest, welche think-cell Elemente in einer PowerPoint-Vorlage bei einer Aktualisierung durch neue Excel-Daten betroffen sein sollen. Sie können Elemente unabhängig davon, ob sie über eine Verknüpfung mit Excel verbunden sind, einer Aktualisierung unterziehen.
UpdateBatch hat UpdateChart ersetzt (veraltet). Obwohl bestehender Code, der UpdateChart verwendet, weiterhin funktioniert, empfehlen wir Ihnen, stattdessen UpdateBatch zu verwenden:
- Neue Funktionen, wie etwa das Füllen von Bildern von Tabellen mit Excel-Daten (siehe Tabellenbilder einfügen), sind nur verfügbar in
UpdateBatch. - Bei neueren think-cell Versionen kann
UpdateChartsehr langsam sein, insbesondere bei großen Präsentationen.
Batch-Signaturen aktualisieren
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();
Batch-Beschreibungen aktualisieren
UpdateBatch enthält die folgenden Funktionen:
CreateUpdateerstellt ein Objekt, um alle Elemente zu speichern, die Sie aktualisieren möchten, und deren entsprechende Excel-Datenbereiche.AddRangeDataplant eine Aktualisierung für ein Diagramm, eine Tabelle, ein automatisiertes Textfeld, einen Harvey Ball, ein Kontrollkästchen oder ein Bild, das Sie mit Excel-Daten füllen möchten.AddRangeImageplant eine Aktualisierung für ein Tabellenbild, das Sie mit Excel-Daten füllen möchten (siehe Tabellenbilder einfügen).Sendsammelt die Excel-Daten und sendet sie an PowerPoint, um eine Präsentation zu erstellen. Wenn Ihr Code auf Excel-verknüpfte Elemente in Ihrer PowerPoint-Vorlage abzielt, werden diese Verknüpfungen unterbrochen (siehe Elemente aus Excel erstellen).
AddRangeData und AddRangeImage nehmen die folgenden Argumente an:
Targetbezieht sich auf die PowerPoint-Vorlage, die die Elemente enthält, die Sie mit Daten füllen möchten.TargetkannPresentation,SlideRange,Slide,MasteroderCustomLayoutsein.Namebezieht sich auf ein Element mit einemAddRangeData- oderAddRangeImage-Namen. Bevor SieUpdateBatchausführen, müssen Sie den Namen in der PowerPoint-Vorlage mit AddRangeData Name oder AddRangeImage Name zuweisen (siehe PowerPoint-Vorlagen für die Berichtsautomatisierung erstellen). Bei Namen wird nicht zwischen Groß- und Kleinschreibung unterschieden. Wenn zwei Elemente innerhalb vonTargetdenselben Namen haben, füllt think-cell sie mit denselben Daten.Rangebezieht sich auf den Excel-Bereich, der die Daten für das Element enthält.Transposed(nurAddRangeData): Um die Ausrichtung der Zeilen und Spalten im aktualisierten Element-Datenblatt (siehe Datenlayout von verknüpften Bereichen transponieren und bearbeiten) zu tauschen, setzen SieTransposedaufTrue. Wenn die Ausrichtung der Elementdaten mit der Ausrichtung der Excel-Daten übereinstimmt, setzen SieTransposedaufFalse.
Batch-Beispiele aktualisieren
Die folgenden VBA- und C#-Codebeispiele aktualisieren drei Elemente in der PowerPoint-Vorlage mit den Daten aus dem ersten Blatt einer Excel-Arbeitsmappe. Die Beispiele speichern die resultierende Präsentation als template_updated.pptx.
Um diese Beispiele zu verwenden, erstellen Sie eine PowerPoint-Vorlage mit think-cell Elementen und eine Excel-Arbeitsmappe mit Daten, um die Elemente zu füllen.
Erstellen der PowerPoint-Vorlage anhand der folgenden Schritte:
- Erstellen Sie eine PowerPoint-Präsentation mit einem Folientitel und einem Diagramm, wie in Beispiel einer PowerPoint-Vorlage beschrieben.
- Fügen Sie in der Präsentation ein Bild einer Tabelle hinzu (siehe Tabellenbilder einfügen).
- Öffnen Sie die Mini-Symbolleiste der Tabelle. Geben Sie in AddRangeImage Name
TableAsImage1ein. Wählen Sie Enter. - Speichern Sie die Präsentation unter
C:\Samples\UpdateBatch\template.pptx.
Zum Erstellen der Excel-Arbeitsmappe führen Sie die folgenden Schritte aus:
- Öffnen Sie eine Excel-Arbeitsmappe.
- Geben Sie in A1 einen Folientitel ein.
- Geben Sie in A2:D5 Diagrammdaten ein. Stellen Sie sicher, dass das Datenlayout in Excel mit dem Layout des Diagramm-Datenblatts in der PowerPoint-Vorlage übereinstimmt (siehe Excel- und Vorlagendatenlayouts abgleichen).
- Geben Sie in A7:D10 die Tabellendaten ein. Alle von Ihnen vorgenommenen Tabellenformatierungen, wie Füllungen und Rahmen, werden in die neue Präsentation übernommen.
- Speichern Sie die Arbeitsmappe unter
C:\Samples\UpdateBatch\data.xlsx.
Verwenden Sie bei der Angabe von Pfaden in Ihren UpdateBatch-Prozeduren einen doppelten Backslash (\\) als Verzeichnistrennzeichen.
VBA
Um dieses Codebeispiel zu verwenden, erstellen Sie in der zuvor erstellten Excel-Arbeitsmappe ein Modul mit der folgenden Vorgehensweise. Das Modul erfordert eine Referenz auf Microsoft PowerPoint 16.0 Object Library. Weitere Informationen siehe 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#
Um dieses Codebeispiel zu verwenden, ersetzen Sie in der C#Console App-Projektvorlage den Code in Program.cs durch den folgenden Code.
Das Programm erfordert Referenzen auf Microsoft PowerPoint 16.0 Object Library, Microsoft Excel 16.0 Object Library und Microsoft Office 16.0 Object Library. Weitere Informationen siehe 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();
}
}
}
DiagrammAktualisieren (veraltet)
UpdateChart aktualisiert das Datenblatt eines bestimmten Elements mit Ihren Excel-Daten.
UpdateBatch hat UpdateChart ersetzt (siehe Batch aktualisieren). Obwohl bestehender Code, der UpdateChart verwendet, weiterhin funktioniert, empfehlen wir Ihnen, stattdessen UpdateBatch für einen neuen Code zu verwenden:
- Neue Funktionen, wie etwa das Füllen von Bildern von Tabellen mit Excel-Daten (siehe Tabellenbilder einfügen), sind nur verfügbar in
UpdateBatch. - Bei neueren think-cell Versionen kann
UpdateChartsehr langsam sein, insbesondere bei großen Präsentationen.
Diagramm-Signatur aktualisieren
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
);