Automazione con dati di Excel

In Windows, è possibile usare le funzioni API thinkcell per creare a livello di codice presentazioni thinkcell con dati di Excel.

Introduzione all'automazione con i dati di Excel

Solo Windows

L'automazione di Excel è particolarmente utile quando è necessario generare regolarmente report di grandi dimensioni senza aggiornare manualmente i dati ogni volta. Per attività di creazione di grafici più piccole o ad hoc, è consigliabile usare Collegamenti dati Excel.

Per creare una copia di un modello di PowerPoint e aggiornare tutti gli elementi thinkcell nella presentazione copiata collegati a una cartella di lavoro di Excel (vedere Collegamenti dati Excel), usare la funzione PresentationFromTemplate.

Per aggiornare elementi thinkcell specifici in un modello di PowerPoint, indipendentemente dal fatto che siano collegati a Excel, usare l'API UpdateBatch. UpdateBatch ha sostituito UpdateChart (deprecata). Tuttavia, se il codice esistente usa UpdateChart, continuerà a funzionare.

L'API thinkcell e Office Automation

L'API thinkcell è integrata nel Component Object Model (COM) di Microsoft, quindi è possibile accedere all'API da qualsiasi linguaggio con cui si può programmare Office, ad esempio Visual Basic for Applications (VBA) o C#. Per istruzioni su come usare VBA e C#, vedere Introduzione all'API di thinkcell.

Il punto di accesso a thinkcell è l'oggetto componente aggiuntivo thinkcell. È possibile accedere all'oggetto tramite la raccolta Application.COMAddIns. Le chiamate a thinkcell sono sempre ad associazione tardiva (vedere Microsoft Learn). Pertanto, il tipo dell'oggetto componente aggiuntivo thinkcell è semplicemente Object e non è necessario aggiungere alcuna libreria dei tipi o riferimento. Una volta acquisito l'oggetto, è possibile effettuare chiamate. Ad esempio, in VBA in Excel, usare il codice seguente:

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

In C#, è possibile ottenere l'associazione tardiva dichiarando il riferimento all'oggetto componente aggiuntivo thinkcell come dynamic. Quando si dichiara il riferimento come var, il compilatore deduce che l'oggetto è di tipo dynamic, quindi è possibile usare semplicemente il codice seguente. Qui, xlapp è un riferimento a un oggetto Excel.Application che carica thinkcell.

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

Far corrispondere i layout dei dati di Excel e del modello

Per visualizzare correttamente i dati nel grafico corrispondente, il layout dei dati in Excel deve corrispondere al layout del foglio dati del grafico nel modello (vedere Trasporre e modificare il layout dati degli intervalli collegati). Ad esempio, se si aggiunge la riga 100%= nel grafico del modello, thinkcell interpreta la seconda riga dei dati di Excel come i totali da cui vengono calcolate le percentuali.

La tabella seguente riepiloga le opzioni comuni di layout dei dati, la loro posizione nel layout dei dati e l'impostazione predefinita. Per controllare il layout dei dati di un grafico specifico, fare doppio clic sul grafico per aprirne il foglio dati.

Opzione di layout dei dati

Contenuto

Posizione

Impostazione predefinita

Series

Etichette delle serie

Colonna 1

Selezionato

Category

Etichette delle categorie

Riga 1

Selezionato

100%=

Totali per i calcoli percentuali

Riga 2 (se Category è selezionato)
Riga 1 (se Category non è selezionato)

Non selezionato

Far corrispondere la formattazione degli elementi a Excel

È possibile far corrispondere la formattazione degli elementi, ad esempio formato numerico, riempimento e colore del carattere, alla formattazione nella cartella di lavoro di Excel. Prima di chiamare PresentationFromTemplate o UpdateBatch, nella cartella di lavoro di Excel applicare la formattazione desiderata. Quindi, nel modello di PowerPoint, far corrispondere il formato numerico dell'elemento, la formattazione del carattere, il riempimento o i bordi alla cartella di lavoro di Excel (vedere Abbinare la formattazione dell'elemento all'intervallo di dati collegato).

PresentationFromTemplate

Solo Windows

La funzione PresentationFromTemplate crea una copia di un modello di PowerPoint e aggiorna tutti gli elementi thinkcell nella presentazione copiata collegati a una cartella di lavoro di Excel. Per ulteriori informazioni sugli elementi thinkcell collegati, vedere Collegamenti dati Excel.

Firma di 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
);

Descrizione di PresentationFromTemplate

PresentationFromTemplate accetta gli argomenti seguenti:

  • Workbook si riferisce alla cartella di lavoro di Excel che contiene i dati.
  • Template si riferisce al modello di PowerPoint che contiene gli elementi da riempire con i dati. Per riempire un elemento con i dati, deve essere collegato a un intervallo in Workbook (vedere Collegamenti dati Excel). Template può specificare un percorso relativo dalla posizione di Workbook o un percorso assoluto.
  • PpApplication si riferisce all'istanza di PowerPoint che genera la nuova presentazione.

PresentationAsTemplate crea una copia di Template e aggiorna tutti gli elementi nella presentazione copiata collegati a Workbook, indipendentemente dal fatto che gli elementi siano stati impostati per l'aggiornamento automatico (vedere Gestire i dati negli elementi collegati).

Nella nuova presentazione, PresentationFromTemplate interrompe intenzionalmente i collegamenti a Excel degli elementi aggiornati per evitare ulteriori aggiornamenti involontari. Tuttavia, gli elementi che la funzione non aggiorna mantengono i loro collegamenti a Excel. Ciò significa che è possibile aggiornare collegamenti da più cartelle di lavoro di Excel. A tale scopo, dopo aver creato la nuova presentazione, chiamare di nuovo PresentationFromTemplate con la cartella di lavoro successiva e usare la presentazione appena creata come modello.

Esempi di PresentationFromTemplate

Per usare questi esempi, creare prima una presentazione contenente un grafico a colonne in pila collegato all'intervallo G1:K4 nel primo foglio di una cartella di lavoro di Excel (vedere Creare grafici da Excel). Salvare la presentazione come C:\Samples\PresentationFromTemplate\template.pptx e la cartella di lavoro come data.xlsx nella stessa directory.

VBA

In questo esempio, in Sheet1, la procedura PresentationFromTemplate_Sample() modifica il valore di H3 da i=1 a 10. H3 è collegata al primo valore della prima serie del grafico a colonne in pila. Per ogni nuovo valore di H3, PresentationFromTemplate_Sample() esegue le operazioni seguenti:

  1. Crea una copia di template.pptx.
  2. Nella presentazione copiata, aggiorna il grafico con il nuovo valore.
  3. Interrompe il collegamento a Excel del grafico.
  4. Nella stessa directory del modello, salva la nuova presentazione come output_i.pptx.

Per usare questo esempio, nella cartella di lavoro di Excel data.xlsx creata in precedenza, creare un modulo con la procedura seguente. Il modulo richiede un riferimento a Microsoft PowerPoint 16.0 Object Library (vedere 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 thinkcell 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 questo esempio, il programma apre Excel e carica data.xlsx. Quindi, in Sheet1, il programma modifica il valore di H3 da i=1 a 10. H3 è collegata al primo valore della prima serie del grafico a colonne in pila. Per ogni nuovo valore di H3, il programma esegue le operazioni seguenti:

  1. Crea una copia di template.pptx.
  2. Nella presentazione copiata, aggiorna il grafico con il nuovo valore.
  3. Interrompe il collegamento a Excel del grafico.
  4. Nella stessa directory del modello, salva la nuova presentazione come output_i.pptx.

Per usare questo esempio, nel modello di progetto C# Console App, sostituire il codice in Program.cs con il codice seguente. Il programma richiede riferimenti a Microsoft PowerPoint 16.0 Object Library, Microsoft Excel 16.0 Object Library e Microsoft Office 16.0 Object Library (vedere 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

Solo Windows

Usando l'API UpdateBatch, è possibile specificare quali elementi thinkcell in un modello di PowerPoint verranno aggiornati con nuovi dati di Excel. È possibile aggiornare gli elementi indipendentemente dal fatto che siano collegati a Excel.

UpdateBatch ha sostituito UpdateChart (deprecata). Sebbene il codice esistente che usa UpdateChart continuerà a funzionare, ecco perché è consigliabile usare invece UpdateBatch:

  • Le nuove funzionalità, come il riempimento di immagini di tabelle con dati di Excel (vedere Creare immagini di tabelle), sono disponibili solo in UpdateBatch.
  • Con le versioni più recenti di thinkcell, UpdateChart può essere molto lento, soprattutto con presentazioni di grandi dimensioni.

Firme di 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();

Descrizione di UpdateBatch

UpdateBatch contiene le funzioni seguenti:

  • CreateUpdate crea un oggetto per archiviare tutti gli elementi da aggiornare e i corrispondenti intervalli di dati di Excel.
  • AddRangeData pianifica un aggiornamento per un grafico, una tabella, un campo di testo di automazione, una Harvey ball, una casella di controllo o un'immagine da riempire con dati di Excel.
  • AddRangeImage pianifica un aggiornamento per un'immagine di una tabella da riempire con dati di Excel (vedere Creare immagini di tabelle).
  • Send raccoglie i dati di Excel e li invia a PowerPoint per creare una presentazione. Se il codice ha come destinazione elementi collegati a Excel nel modello di PowerPoint, questi collegamenti verranno interrotti (vedere Collegamenti dati Excel).

AddRangeData e AddRangeImage accettano gli argomenti seguenti:

  • Target si riferisce al modello PowerPoint che contiene gli elementi da compilare con i dati. Target può essere una Presentation, un SlideRange, una Slide, un Master o un CustomLayout.
  • Name si riferisce a un elemento con un nome AddRangeData o AddRangeImage. Prima di eseguire UpdateBatch, assegnare il nome nel modello PowerPoint usando AddRangeData Name o AddRangeImage Name (vedere Creare modelli di PowerPoint per l'automazione dei report). I nomi non distinguono tra maiuscole e minuscole. Se due elementi all'interno di Target hanno lo stesso nome, thinkcell li compila con gli stessi dati.
  • Range si riferisce all'intervallo Excel che contiene i dati per l'elemento.
  • Transposed (solo AddRangeData): se l'orientamento dell'intervallo Excel corrisponde all'orientamento predefinito del foglio dati dell'elemento in PowerPoint, impostare Transposed su False. In caso contrario, impostare Transposed su True. Per una descrizione dei valori dell'argomento per diversi tipi di elemento, vedere la tabella seguente.

Tipo di elemento

Transposed valori

Tutti i grafici tranne i grafici di Gantt, a dispersione e a bolle

False = Nel foglio dati dell'elemento, le righe in Range rappresentano le serie e le colonne rappresentano le categorie

True = Nel foglio dati dell'elemento, le colonne in Range rappresentano le serie e le righe rappresentano le categorie

Tabelle

False = Il layout della tabella corrisponde a Range

True = Il layout della tabella è trasposto rispetto a Range

Grafici di Gantt

False = Nel foglio dati dell'elemento, le righe in Range rappresentano le attività e le colonne rappresentano i punti di ancoraggio corrispondenti

True = Nel foglio dati dell'elemento, le colonne in Range rappresentano le attività e le righe rappresentano i punti di ancoraggio corrispondenti

Grafici a dispersione e a bolle

False = Nel foglio dati dell'elemento, le righe in Range rappresentano i punti dati e le colonne rappresentano le dimensioni

True = Nel foglio dati dell'elemento, le colonne in Range rappresentano i punti dati e le righe rappresentano le dimensioni

Esempi di UpdateBatch

Gli esempi di codice VBA e C# seguenti aggiornano tre elementi nel modello PowerPoint con i dati del primo foglio di una cartella di lavoro Excel. Gli esempi salvano la presentazione risultante come template_updated.pptx.

Per usare questi esempi, creare un modello PowerPoint con elementi thinkcell e una cartella di lavoro Excel con dati per compilare gli elementi.

Per creare il modello PowerPoint, seguire questi passaggi:

  1. Creare una presentazione PowerPoint con un titolo della diapositiva e un grafico come descritto in Esempio di modello PowerPoint.
  2. Nella presentazione, aggiungere un'immagine di una tabella (vedere Creare immagini di tabelle).
  3. Aprire la barra di formattazione rapida della tabella. In AddRangeImage Name, immettere TableAsImage1. Selezionare Enter.
  4. Salvare la presentazione in C:\Samples\UpdateBatch\template.pptx.

Per creare la cartella di lavoro Excel, seguire questi passaggi:

  1. Aprire una cartella di lavoro Excel.
  2. In A1, immettere un titolo della diapositiva.
  3. In A2:D5, immettere i dati del grafico. Assicurarsi che il layout dei dati in Excel corrisponda al layout del foglio dati del grafico nel modello PowerPoint (vedere Far corrispondere i layout dei dati di Excel e del modello).
  4. In A7:D10, immettere i dati della tabella. Qualsiasi formattazione della tabella applicata, ad esempio riempimenti e bordi, verrà visualizzata nella nuova presentazione.
  5. Salvare la cartella di lavoro in C:\Samples\UpdateBatch\data.xlsx.

Quando si specificano percorsi nelle procedure UpdateBatch, usare una doppia barra rovesciata (\\) come separatore di directory.

VBA

Per usare questo esempio di codice, nella cartella di lavoro Excel creata in precedenza, creare un modulo con la procedura seguente. Il modulo richiede un riferimento a Microsoft PowerPoint 16.0 Object Library. Per ulteriori informazioni, vedere 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 thinkcell 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#

Per usare questo esempio di codice, nel modello di progetto C# Console App, sostituire il codice in Program.cs con il codice seguente.

Il programma richiede riferimenti a Microsoft PowerPoint 16.0 Object Library, Microsoft Excel 16.0 Object Library e Microsoft Office 16.0 Object Library. Per ulteriori informazioni, vedere 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 (deprecato)

Solo Windows

UpdateChart aggiorna il foglio dati di un elemento specifico con i dati Excel.

UpdateBatch ha sostituito UpdateChart (vedere UpdateBatch). Sebbene il codice esistente che usa UpdateChart continui a funzionare, ecco perché consigliamo di usare UpdateBatch per il nuovo codice:

  • Le nuove funzionalità, come il riempimento di immagini di tabelle con dati di Excel (vedere Creare immagini di tabelle), sono disponibili solo in UpdateBatch.
  • Con le versioni più recenti di thinkcell, UpdateChart può essere molto lento, soprattutto con presentazioni di grandi dimensioni.

Firma di 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
);

Hai bisogno di risolvere un problema?

Consulta la nostra knowledge base