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

Solo Windows

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)
Fila 1 (si Category no 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

Solo Windows

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:

  • Workbook hace referencia al libro de Excel que contiene sus datos.
  • Template hace 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 en Workbook (consulte Crear elementos desde Excel). Template puede especificar una ruta relativa desde la ubicación de Workbook o una ruta absoluta.
  • PpApplication se 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:

  1. Hace una copia de template.pptx.
  2. En la presentación copiada, actualiza el gráfico con el nuevo valor.
  3. Rompe el vínculo de Excel del gráfico.
  4. 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:

  1. Hace una copia de template.pptx.
  2. En la presentación copiada, actualiza el gráfico con el nuevo valor.
  3. Rompe el vínculo de Excel del gráfico.
  4. 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

Solo Windows

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, UpdateChart puede 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:

  • CreateUpdate crea un objeto para almacenar todos los elementos que desea actualizar y sus correspondientes intervalos de datos de Excel.
  • AddRangeData programa 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.
  • AddRangeImage programa una actualización para una imagen de una tabla que desea rellenar con datos de Excel (consulte Insertar imágenes de tablas).
  • Send recopila 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:

  • Target hace referencia a la plantilla de PowerPoint que contiene los elementos que desea rellenar con datos. Target puede ser un Presentation, SlideRange, Slide, Master o CustomLayout.
  • Name se refiere a un elemento con un nombre AddRangeData o AddRangeImage. Antes de ejecutar UpdateBatch, 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 de Target tienen el mismo nombre, think-cell los rellena con los mismos datos.
  • Range se refiere al rango de Excel que contiene los datos del elemento.
  • Transposed (solo AddRangeData): 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), establezca Transposed en True. Si la orientación de los datos del elemento coincide con la orientación de los datos de Excel, establezca Transposed en False.

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:

  1. 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.
  2. En la presentación, añada una imagen de una tabla (consulte Insertar imágenes de tablas).
  3. Abra la minibarra de herramientas de la tabla. En AddRangeImage Name, introduzca TableAsImage1. Seleccione Intro.
  4. Guarde la presentación, p. ej., como C:\Samples\UpdateBatch\template.pptx.

Para crear el libro de Excel, siga estos pasos:

  1. Abra un libro de Excel.
  2. En A1, introduzca un título de diapositiva.
  3. 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).
  4. 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.
  5. 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)

Solo Windows

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, UpdateChart puede 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
);