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

Nur Windows

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)
Zeile 1 (falls Category nicht 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

Nur Windows

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:

  • Workbook bezieht sich auf die Excel-Arbeitsmappe, die Ihre Daten enthält.
  • Template bezieht 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 in Workbook (siehe Elemente aus Excel erstellen) über eine Verknüpfung verbunden sein. Template kann einen relativen Pfad vom Speicherort von Workbook oder einen absoluten Pfad angeben.
  • PpApplication bezieht 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:

  1. Erstellt eine Kopie von template.pptx.
  2. In der kopierten Präsentation wird das Diagramm mit dem neuen Wert einer Aktualisierung unterzogen.
  3. Unterbricht die Excel-Verknüpfung.
  4. 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:

  1. Erstellt eine Kopie von template.pptx.
  2. In der kopierten Präsentation wird das Diagramm mit dem neuen Wert einer Aktualisierung unterzogen.
  3. Unterbricht die Excel-Verknüpfung.
  4. 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

Nur Windows

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 UpdateChart sehr 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:

  • CreateUpdate erstellt ein Objekt, um alle Elemente zu speichern, die Sie aktualisieren möchten, und deren entsprechende Excel-Datenbereiche.
  • AddRangeData plant 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.
  • AddRangeImage plant eine Aktualisierung für ein Tabellenbild, das Sie mit Excel-Daten füllen möchten (siehe Tabellenbilder einfügen).
  • Send sammelt 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:

  • Target bezieht sich auf die PowerPoint-Vorlage, die die Elemente enthält, die Sie mit Daten füllen möchten. Target kann Presentation, SlideRange, Slide, Master oder CustomLayout sein.
  • Name bezieht sich auf ein Element mit einem AddRangeData- oder AddRangeImage-Namen. Bevor Sie UpdateBatch ausfü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 von Target denselben Namen haben, füllt think-cell sie mit denselben Daten.
  • Range bezieht sich auf den Excel-Bereich, der die Daten für das Element enthält.
  • Transposed (nur AddRangeData): Um die Ausrichtung der Zeilen und Spalten im aktualisierten Element-Datenblatt (siehe Datenlayout von verknüpften Bereichen transponieren und bearbeiten) zu tauschen, setzen Sie Transposed auf True. Wenn die Ausrichtung der Elementdaten mit der Ausrichtung der Excel-Daten übereinstimmt, setzen Sie Transposed auf False.

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:

  1. Erstellen Sie eine PowerPoint-Präsentation mit einem Folientitel und einem Diagramm, wie in Beispiel einer PowerPoint-Vorlage beschrieben.
  2. Fügen Sie in der Präsentation ein Bild einer Tabelle hinzu (siehe Tabellenbilder einfügen).
  3. Öffnen Sie die Mini-Symbolleiste der Tabelle. Geben Sie in AddRangeImage Name TableAsImage1 ein. Wählen Sie Enter.
  4. Speichern Sie die Präsentation unter C:\Samples\UpdateBatch\template.pptx.

Zum Erstellen der Excel-Arbeitsmappe führen Sie die folgenden Schritte aus:

  1. Öffnen Sie eine Excel-Arbeitsmappe.
  2. Geben Sie in A1 einen Folientitel ein.
  3. 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).
  4. 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.
  5. 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)

Nur Windows

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 UpdateChart sehr 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
);