Automazione con dati Excel
- Home
- Risorse
- Manuale dell’utente
- think-cell Chart: Visualizzazione dei dati
- Automazione avanzata dei report
- Automazione con dati Excel
In Windows è possibile utilizzare le funzioni API think-cell per creare programmaticamente presentazioni think-cell con dati da Excel.
Introduzione all'automazione con i dati Excel
L'automazione di Excel è più vantaggiosa quando è necessario generare regolarmente report di grandi dimensioni senza aggiornare manualmente i dati ogni volta. Per le attività di creazione di grafici più piccoli o ad hoc, si consiglia di utilizzare Creare elementi da Excel.
Per creare una copia di un modello di PowerPoint e aggiornare tutti gli elementi think-cell della presentazione copiata collegati a una cartella di lavoro di Excel (vedere Creare elementi da Excel), utilizzare la funzione PresentationFromTemplate.
Per aggiornare elementi think-cell specifici in un modello di PowerPoint, indipendentemente dal fatto che siano collegati a Excel, utilizzare l'API UpdateBatch. UpdateBatch ha sostituito UpdateChart (superato). Tuttavia, se il codice esistente utilizza UpdateChart, continuerà a funzionare.
L'API di think-cell e l'automazione di Office
L'API think-cell è integrata nel Component Object Model (COM) di Microsoft, in modo da poter accedere all'API da qualsiasi lingua con cui è possibile programmare Office, come Visual Basic for Applications (VBA) o C#. Per istruzioni su come utilizzare VBA e C#, vedere Iniziare subito a utilizzare l’API think-cell.
Il punto di ingresso in think-cell è l'oggetto dell'add-in think-cell. È possibile accedere all'oggetto tramite la raccolta Application.COMAddIns. Le chiamate a think-cell sono sempre ad associazione tardiva (vedere Microsoft Learn). Il tipo dell’oggetto dell'add-in di think-cell è dunque semplicemente Object e non è necessario aggiungere alcuna libreria dei tipi o alcun riferimento. Una volta acquisito l’oggetto si possono effettuare delle chiamate. Ad esempio, in VBA in Excel, utilizzare il seguente codice:
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
In C#, è possibile ottenere l'associazione tardiva dichiarando il riferimento all'oggetto dell'add-in think-cell come dynamic. Quando si dichiara il riferimento come var, il compilatore deduce che l'oggetto è di tipo dynamic ed è sufficiente utilizzare il codice seguente. In questo caso, xlapp è un riferimento a un oggetto Excel.Application che carica think-cell.
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
Abbinare layout dati Excel e modelli
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 dei dati degli intervalli collegati). Ad esempio, se si aggiunge la riga 100%= nel grafico del modello, think-cell interpreta la seconda riga dei dati di Excel come i totali da cui vengono calcolate le percentuali.
La tabella seguente riassume le opzioni comuni di layout dei dati, la loro posizione nel layout dei dati e le impostazioni predefinite. Per controllare il layout dei dati di un grafico specifico, fare doppio clic sul grafico per aprire il foglio dati.
|
Data layout option |
Contents |
Position |
Default setting |
|---|---|---|---|
|
Series |
Etichette serie |
Colonna 1 |
Selezionato |
|
Category |
Etichette categoria |
Riga 1 |
Selezionato |
|
100%= |
Totali per i calcoli percentuali |
Riga 2 (se Category selezionata) |
Non selezionato |
Combinare la formattazione degli elementi a Excel
È possibile abbinare 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, abbinare il formato numerico dell'elemento, la formattazione del carattere, il riempimento o i bordi alla cartella di lavoro di Excel (vedere Abbinare la formattazione degli elementi all'intervallo di dati collegato).
PresentationFromTemplate
La funzione PresentationFromTemplate crea una copia di un modello di PowerPoint e aggiorna tutti gli elementi think-cell della presentazione copiata collegati a una cartella di lavoro di Excel. Per ulteriori informazioni sugli elementi think-cell collegati, vedere Creare elementi da Excel.
Firma 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 PresentationFromTemplate
PresentationFromTemplate tratta i seguenti argomenti:
Workbooksi riferisce alla cartella di lavoro di Excel che contiene i dati.Templatesi riferisce al modello di PowerPoint che contiene gli elementi che si desidera riempire con i dati. Per riempire un elemento di dati, quest'ultimo deve essere collegato a un intervallo inWorkbook(vedere Creare elementi da Excel).Templatepuò specificare un percorso relativo dalla posizioneWorkbookdi o un percorso assoluto.PpApplicationsi riferisce all'istanza di PowerPoint che genera la nuova presentazione.
PresentationAsTemplate crea una copia di Template e aggiorna tutti gli elementi della presentazione copiata collegati a Workbook, indipendentemente dal fatto che siano stati impostati gli elementi per l'aggiornamento automatico (vedere Gestire i dati negli elementi collegati).
Nella nuova presentazione, PresentationFromTemplate interrompe intenzionalmente i collegamenti 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 i collegamenti da più cartelle di lavoro di Excel. Per farlo, dopo aver creato la nuova presentazione, chiamare di nuovo PresentationFromTemplate con la cartella di lavoro successiva e utilizzare la presentazione appena creata come modello.
Esempi PresentationFromTemplate
Per utilizzare questi esempi, creare innanzitutto una presentazione contenente un grafico a colonne in pila collegato all’intervallo G1:K4 del primo foglio in 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 all’interno della stessa directory.
VBA
In questo esempio, in Sheet1, la procedura PresentationFromTemplate_Sample() modifica il valore di H3 da i=1 a 10. H3 è collegato al primo valore nella prima serie del grafico a colonna in pila. Per ogni nuovo valore di H3, PresentationFromTemplate_Sample() effettua le seguenti operazioni:
- Crea una copia di
template.pptx. - Nella presentazione copiata, aggiorna il grafico con il nuovo valore.
- Interrompe il collegamento a Excel del grafico.
- Nella stessa directory del modello, salva la nuova presentazione come
output_i.pptx.
Per utilizzare questo esempio, nella cartella di lavoro 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 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 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 è collegato al primo valore nella prima serie del grafico a colonna in pila. Per ogni nuovo valore di H3, il programma esegue le seguenti operazioni:
- Crea una copia di
template.pptx. - Nella presentazione copiata, aggiorna il grafico con il nuovo valore.
- Interrompe il collegamento a Excel del grafico.
- Nella stessa directory del modello, salva la nuova presentazione come
output_i.pptx.
Per utilizzare 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, a Microsoft Excel 16.0 Object Library, e a 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
Con l'API UpdateBatch, specificare quali elementi think-cell in un modello di PowerPoint verranno aggiornati con nuovi dati Excel. È possibile aggiornare gli elementi indipendentemente dal fatto che siano collegati a Excel.
UpdateBatch ha sostituito UpdateChart (superato). Anche se il codice esistente che utilizza UpdateChart continuerà a funzionare, ecco perché consigliamo di utilizzare UpdateBatch al suo posto:
- La nuova funzionalità, ad esempio il riempimento di immagini di tabelle con dati Excel (vedere Inserire immagini di tabelle), è disponibile solo in
UpdateBatch. - Con le versioni think-cell più recenti,
UpdateChartpuò essere molto lento, soprattutto con presentazioni di grandi dimensioni.
Firme 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 UpdateBatch
UpdateBatch contiene le seguenti funzioni:
CreateUpdatecrea un oggetto per memorizzare tutti gli elementi che si desidera aggiornare e i relativi intervalli di dati Excel corrispondenti.AddRangeDataprogramma un aggiornamento per un grafico, una tabella, un campo di testo di automazione, una Harvey Ball, una casella di controllo o un'immagine che si desidera riempire con i dati Excel.AddRangeImageprogramma un aggiornamento per un'immagine di una tabella che si desidera riempire con dati Excel (vedere Inserire immagini di tabelle).Sendraccoglie i dati di Excel e li invia a PowerPoint per creare una presentazione. Se il codice si rivolge a elementi collegati a Excel nel modello di PowerPoint, questi collegamenti si interromperanno (vedere Creare elementi da Excel).
AddRangeData e AddRangeImage trattano i seguenti argomenti:
Targetsi riferisce al modello di PowerPoint che contiene gli elementi che si desidera riempire con i dati.Targetpuò essere unPresentation,SlideRange,Slide, oMaster.CustomLayoutNamesi riferisce a un elemento con unAddRangeDatao nomeAddRangeImage. Prima di eseguireUpdateBatch, è necessario assegnare il nome nel modello di PowerPoint utilizzando AddRangeData Name o AddRangeImage Name (vedere Creare modelli di PowerPoint per l'automazione dei report). I nomi non fanno distinzione tra maiuscole e minuscole. Se due elementi all'interno diTargethanno lo stesso nome, think-cell li riempie con gli stessi dati.Rangesi riferisce all'intervallo Excel che contiene i dati per l'elemento.Transposed(AddRangeDatasolo): Per cambiare l'orientamento delle righe e delle colonne nel foglio dati dell'elemento aggiornato (vedere Trasporre e modificare il layout dei dati degli intervalli collegati), impostareTransposedsuTrue. Se l'orientamento dei dati dell'elemento corrisponde all'orientamento dei dati Excel, impostareTransposedsuFalse.
Esempi UpdateBatch
I seguenti esempi di codice VBA e C# aggiornano tre elementi nel modello di PowerPoint con i dati nel primo foglio di una cartella di lavoro di Excel. Gli esempi salvano la presentazione risultante come template_updated.pptx.
Per utilizzare questi esempi, creare un modello di PowerPoint con think-cell elementi e una cartella di lavoro Excel con dati per riempire gli elementi.
Per creare il modello di PowerPoint, attenersi alla seguente procedura:
- Creare una presentazione PowerPoint con un titolo della diapositiva e un grafico come descritto in Esempio di modello di PowerPoint.
- Nella presentazione, aggiungere un'immagine di una tabella (vedere Inserire immagini di tabelle).
- Aprire la mini barra degli strumenti della tabella. In AddRangeImage Name, immettere
TableAsImage1. Selezionare Invio. - Salvare la presentazione in
C:\Samples\UpdateBatch\template.pptx.
Per creare la cartella di lavoro di Excel, attenersi alla seguente procedura:
- Aprire una cartella di lavoro di Excel.
- In A1, immettere un titolo della diapositiva.
- 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 di PowerPoint (vedere Abbinare layout dati Excel e modelli).
- In A7:D10, immettere i dati della tabella. Qualsiasi formattazione della tabella applicata, come i riempimenti e i bordi, verrà visualizzata nella nuova presentazione.
- Salvare la cartella di lavoro in
C:\Samples\UpdateBatch\data.xlsx.
Quando si specificano i percorsi nelle procedure UpdateBatch, utilizzare una doppia barra rovesciata (\\) come separatore di directory.
VBA
Per utilizzare 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 maggiori informazioni, fare riferimento a 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#
Per utilizzare 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 maggiori informazioni, fare riferimento a 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)
UpdateChart aggiorna il foglio dati di un elemento specifico con i propri dati Excel.
UpdateBatch ha sostituito (UpdateChartvedere UpdateBatch). Anche se il codice esistente che utilizza UpdateChart continuerà a funzionare, ecco perché consigliamo di utilizzare UpdateBatch per il nuovo codice:
- La nuova funzionalità, ad esempio il riempimento di immagini di tabelle con dati Excel (vedere Inserire immagini di tabelle), è disponibile solo in
UpdateBatch. - Con le versioni think-cell più recenti,
UpdateChartpuò essere molto lento, soprattutto con presentazioni di grandi dimensioni.
Firma 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
);