Automatización con datos de Excel
- Inicio
- Recursos
- Manual del usuario
- think-cell Charts: Visualización de datos
- Automatización avanzada de informes
- Automatización con datos de Excel
En Windows, puede utilizar las funciones de API think-cell para crear presentaciones think-cell mediante programación con datos de Excel.
Introducción a la automatización con datos de Excel
La automatización de Excel es más beneficiosa cuando necesita generar informes grandes regularmente sin actualizar manualmente los datos cada vez. Para tareas de gráficos más pequeñas o ad hoc, recomendamos utilizar Crear elementos desde Excel.
Para crear una copia de una plantilla de PowerPoint y actualizar todos los elementos think-cell de la presentación copiada vinculados a un libro de Excel (consulte Crear elementos desde Excel), utilice la función PresentationFromTemplate.
Para actualizar elementos think-cell específicos en una plantilla de PowerPoint, independientemente de si están vinculados a Excel, utilice la API de UpdateBatch. UpdateBatch ha sustituido UpdateChart (obsoleto). Sin embargo, si su código existente utiliza UpdateChart, este código seguirá funcionando.
La API de think-cell y la automatización de Office
La API de think-cell está integrada en el modelo de objeto de componente (COM) de Microsoft, por lo que puede acceder a la API desde cualquier idioma con el que pueda programar Office, como Visual Basic for Applications (VBA) o C#. Para obtener instrucciones sobre cómo utilizar VBA y C#, consulte Comience a utilizar la API de think-cell.
El punto de entrada en think-cell es el objeto complemento think-cell. Puede acceder al objeto a través de la colección Application.COMAddIns. Las llamadas a think-cell son siempre enlazadas en tiempo de ejecución (consulte Microsoft Learn). Así pues, el tipo de objeto de complemento de think-cell es sencillamente Object, y no debe añadirse ningún tipo de biblioteca ni referencia. Una vez que haya adquirido el objeto, ya podrá realizar llamadas. Por ejemplo, en VBA en Excel, utilice el siguiente código:
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
En C#, puede conseguir un enlace tardío declarando la referencia al objeto del complemento de think-cell como dynamic. Cuando se declara la referencia como var, el compilador infiere que el objeto es de tipo dynamic, por lo que simplemente puede utilizar el siguiente código. Aquí xlapp hace referencia a un objeto Excel.Application que carga think-cell.
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
Hacer coincidir diseños de datos de plantilla y Excel
Para mostrar correctamente los datos en su gráfico correspondiente, el diseño de los datos en Excel debe coincidir con el diseño de la hoja de datos del gráfico en la plantilla (consulte Transponer y editar el diseño de datos de los rangos vinculados). Por ejemplo, si añade la fila 100%= en el gráfico de la plantilla, think-cell interpreta la segunda fila de los datos de Excel como los totales a partir de los cuales se calculan los porcentajes.
La siguiente tabla resume las opciones de diseño de datos comunes, su posición en el diseño de datos y su configuración predeterminada. Para comprobar el diseño de datos de un gráfico específico, haga doble clic en el gráfico para abrir su hoja de datos.
|
Data layout option |
Contents |
Position |
Default setting |
|---|---|---|---|
|
Series |
Etiquetas de series |
Columna 1 |
Seleccionado |
|
Category |
Etiqueta de categoría |
Fila 1 |
Seleccionado |
|
100%= |
Totales para cálculos de porcentaje |
Fila 2 (si Category está seleccionada) |
No seleccionado |
Hacer coincidir formato de elemento con Excel
Puede relacionar el formato de los elementos, como el formato de número, relleno y color de fuente, con el formato del libro de Excel. Antes de llamar a PresentationFromTemplate o UpdateBatch, en su libro de Excel, aplique el formato que desee. A continuación, en la plantilla de PowerPoint, haga coincidir el formato de número, el formato de fuente, el relleno o los bordes del elemento con el libro de Excel (consulte Hacer coincidir el formato del elemento con el rango de datos vinculado).
PresentationFromTemplate
La función PresentationFromTemplate crea una copia de una plantilla de PowerPoint y actualiza todos los elementos think-cell de la presentación copiada que están vinculados a un libro de Excel. Para obtener más información sobre los elementos think-cell vinculados, consulte Crear elementos desde 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
);
Descripción PresentationFromTemplate
PresentationFromTemplate toma los siguientes argumentos:
Workbookhace referencia al libro de Excel que contiene sus datos.Templatehace referencia a la plantilla de PowerPoint que contiene los elementos que desea rellenar con datos. Para rellenar un elemento con datos, debe estar vinculado a un rango enWorkbook(consulte Crear elementos desde Excel).Templatepuede especificar una ruta relativa desde la ubicación deWorkbooko una ruta absoluta.PpApplicationse refiere a la instancia de PowerPoint que genera la nueva presentación.
PresentationAsTemplate crea una copia de Template y actualiza todos los elementos de la presentación copiada que están vinculados a Workbook, independientemente de si ha configurado los elementos para que se actualicen automáticamente (consulte Administrar los datos en elementos vinculados).
En la nueva presentación, PresentationFromTemplate rompe intencionadamente los vínculos de Excel de los elementos actualizados para evitar cualquier actualización adicional involuntaria. Sin embargo, los elementos que la función no actualiza mantienen sus vínculos de Excel. Esto significa que puede actualizar vínculos desde varios libros de Excel. Para ello, después de crear su nueva presentación, vuelva a llamar a PresentationFromTemplate con su próximo libro de trabajo y utilice la presentación que acaba de crear como plantilla.
Ejemplos PresentationFromTemplate
Para utilizar estos ejemplos, cree primero una presentación que contenga un gráfico de columnas acumuladas vinculado al rango G1:K4 de la primera hoja de un libro de Excel, (consulte Crear gráficos desde Excel). Guarde la presentación como C:\Samples\PresentationFromTemplate\template.pptx y el libro de trabajo como data.xlsx en el mismo directorio.
VBA
En este ejemplo, en la Sheet1, el procedimiento PresentationFromTemplate_Sample() cambia el valor de H3 de i=1 a 10. H3 está vinculado al primer valor de la primera serie del gráfico de columnas acumuladas. Para cada nuevo valor de H3, PresentationFromTemplate_Sample() hace lo siguiente:
- Hace una copia de
template.pptx. - En la presentación copiada, actualiza el gráfico con el nuevo valor.
- Rompe el vínculo de Excel del gráfico.
- En el mismo directorio que la plantilla, guarda la nueva presentación como
output_i.pptx.
Para usar este ejemplo, en el libro de Excel data.xlsx que creó anteriormente, cree un módulo con el siguiente procedimiento. El módulo requiere una referencia al Microsoft PowerPoint 16.0 Object Library (consulte la Visual Basic para Aplicaciones).
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#
En este ejemplo, el programa abre Excel y carga data.xlsx. A continuación, en Sheet1, el programa cambia el valor de H3 de i=1 a 10. H3 está vinculado al primer valor de la primera serie del gráfico de columnas acumuladas. Para cada nuevo valor de H3, el programa hace lo siguiente:
- Hace una copia de
template.pptx. - En la presentación copiada, actualiza el gráfico con el nuevo valor.
- Rompe el vínculo de Excel del gráfico.
- En el mismo directorio que la plantilla, guarda la nueva presentación como
output_i.pptx.
Para usar este ejemplo, en la plantilla de proyecto Console App C#, reemplace el código en Program.cs con el siguiente código. El programa requiere referencias al Microsoft PowerPoint 16.0 Object Library, al Microsoft Excel 16.0 Object Library y al Microsoft Office 16.0 Object Library (consulte 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 la API de UpdateBatch, especifique qué elementos think-cell de una plantilla de PowerPoint se actualizarán con nuevos datos de Excel. Puede actualizar elementos independientemente de si están vinculados a Excel.
UpdateBatch ha sido sustituido UpdateChart (obsoleto). Aunque el código existente que utiliza UpdateChart seguirá funcionando, le recomendamos que utilice UpdateBatch en su lugar:
- La nueva funcionalidad, como el llenado de imágenes de tablas con datos de Excel (consulte Insertar imágenes de tablas), solo está disponible en
UpdateBatch. - Con las versiones think-cell más recientes,
UpdateChartpuede ir con mucha lentitud, especialmente con presentaciones grandes.
Firmas 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();
Descripción UpdateBatch
UpdateBatch contiene las siguientes funciones:
CreateUpdatecrea un objeto para almacenar todos los elementos que desea actualizar y sus correspondientes intervalos de datos de Excel.AddRangeDataprograma una actualización para un gráfico, tabla, campo de texto de automatización, Harvey Ball, casilla de verificación o imagen que desea rellenar con datos de Excel.AddRangeImageprograma una actualización para una imagen de una tabla que desea rellenar con datos de Excel (consulte Insertar imágenes de tablas).Sendrecopila los datos de Excel y los envía a PowerPoint para crear una presentación. Si el código está dirigido a elementos vinculados a Excel en la plantilla de PowerPoint, estos vínculos se romperán (consulte Crear elementos desde Excel).
AddRangeData y AddRangeImage toman los siguientes argumentos:
Targethace referencia a la plantilla de PowerPoint que contiene los elementos que desea rellenar con datos.Targetpuede ser unPresentation,SlideRange,Slide,MasteroCustomLayout.Namese refiere a un elemento con un nombreAddRangeDataoAddRangeImage. Antes de ejecutarUpdateBatch, debe asignar el nombre en la plantilla de PowerPoint utilizando AddRangeData Name o AddRangeImage Name (consulte Crear plantillas de PowerPoint para la automatización de informes). Los nombres no distinguen entre mayúsculas y minúsculas. Si dos elementos deTargettienen el mismo nombre, think-cell los rellena con los mismos datos.Rangese refiere al rango de Excel que contiene los datos del elemento.Transposed(soloAddRangeData): Para intercambiar la orientación de las filas y columnas en la hoja de datos del elemento actualizado (consulte Transponer y editar el diseño de datos de los rangos vinculados), establezcaTransposedenTrue. Si la orientación de los datos del elemento coincide con la orientación de los datos de Excel, establezcaTransposedenFalse.
Ejemplos UpdateBatch
Los siguientes ejemplos de código VBA y C# actualizan tres elementos en la plantilla de PowerPoint con los datos de la primera hoja de un libro de Excel. Los ejemplos guardan la presentación resultante como template_updated.pptx.
Para utilizar estos ejemplos, cree una plantilla de PowerPoint con think-cell elementos y un libro de Excel con datos para rellenar los elementos.
Para crear la plantilla de PowerPoint, siga estos pasos:
- Cree una presentación de PowerPoint con un título de diapositiva y un gráfico como se describe en Ejemplo de plantilla de PowerPoint.
- En la presentación, añada una imagen de una tabla (consulte Insertar imágenes de tablas).
- Abra la minibarra de herramientas de la tabla. En AddRangeImage Name, introduzca
TableAsImage1. Seleccione Intro. - Guarde la presentación, p. ej., como
C:\Samples\UpdateBatch\template.pptx.
Para crear el libro de Excel, siga estos pasos:
- Abra un libro de Excel.
- En A1, introduzca un título de diapositiva.
- En A2:D5, introduzca los datos del gráfico. Asegúrese de que el diseño de datos en Excel coincide con el diseño de la hoja de datos del gráfico en la plantilla de PowerPoint (consulte Hacer coincidir diseños de datos de plantilla y Excel).
- En A7:D10, introduzca los datos de la tabla. Cualquier formato de tabla que aplique, como rellenos y bordes, aparecerá en la nueva presentación.
- Guarde el libro en
C:\Samples\UpdateBatch\data.xlsx.
Al especificar rutas en sus procedimientos UpdateBatch, utilice una barra diagonal inversa doble (\\) como separador de directorio.
VBA
Para usar este ejemplo de código, en el libro de Excel que creó anteriormente, cree un módulo con el siguiente procedimiento. El módulo requiere una referencia al Microsoft PowerPoint 16.0 Object Library. Para obtener más información, consulte Visual Basic para Aplicaciones.
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#
Para usar este ejemplo de código, en la plantilla de proyecto Console App C#, reemplace el código en Program.cs con el siguiente código.
El programa requiere referencias a Microsoft PowerPoint 16.0 Object Library, a Microsoft Excel 16.0 Object Library y a Microsoft Office 16.0 Object Library. Para obtener más información, consulte 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 (obsoleto)
UpdateChart actualiza la hoja de datos de un elemento específico con sus datos de Excel.
UpdateBatch ha sustituido UpdateChart (consulte UpdateBatch). Aunque el código existente que utiliza UpdateChart seguirá funcionando, le recomendamos que utilice UpdateBatch como nuevo código en su lugar:
- La nueva funcionalidad, como el llenado de imágenes de tablas con datos de Excel (consulte Insertar imágenes de tablas), solo está disponible en
UpdateBatch. - Con las versiones think-cell más recientes,
UpdateChartpuede ir con mucha lentitud, especialmente con presentaciones grandes.
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
);