25. Automatización con datos de Excel
Cuando los datos se proporcionan en Excel, puedes utilizar las funciones UpdateChart
y PresentationFromTemplate
para controlar mediante programación utilizando esa información.
Con UpdateChart
intercambia la hoja de datos de un elemento específico con sus datos de Excel. Con PresentationFromTemplate
utiliza sus datos para crear una nueva presentación basada en una plantilla de PowerPoint con elementos de think-cell vinculados a rangos de datos en Excel que se describen en 21. Enlaces de datos de Excel.
La interfaz para ambas funciones está integrada en el modelo de automatización de Office, de manera que puede accederse a ella en cualquier lenguaje en el que se programa Office, como Visual Basic para Aplicaciones (VBA) o C#. Consulte Primeros pasos para ver las instrucciones detalladas.
El punto de entrada a think-cell es el objeto de complemento think-cell. Puede accederse a él por medio de la colección Application.COMAddIns
. Las llamadas a think-cell son siempre enlazadas en tiempo de ejecución. Consulte la base de conocimientos de Microsoft siguiente para obtener más información:
Uso de la vinculación temprana y la vinculación tardía en la automatización
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. No tienen más que adquirir el objeto para poder realizar llamadas. Por ejemplo, en VBA en Excel:
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
En C#, puede conseguir la vinculación tardía declarando la referencia al objeto de complemento de think-cell como dynamic
; este es también el tipo inferido por el compilador al declarar la referencia como var
, de modo que puede escribir simplemente:
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
Aquí, xlapp
es una referencia a un objeto de Excel.Application
en el que se ha cargado think-cell.
- 25.1
- UpdateChart
- 25.2
- PresentationFromTemplate
25.1 UpdateChart
25.1.1 Firma
VBA
tcXlAddIn.UpdateChart( _
target As Object, _
strName As String, _
rgData As Excel.Range, _
bTransposed As Boolean _
)
C#
void tcXlAddIn.UpdateChart(
object target,
string strName,
Excel.Range rgData,
bool bTransposed
);
25.1.2 Descripción
Esta función actualiza todos los elementos en target
llamados strName
con los datos contenidos en rgData
. Para que los datos se interpreten correctamente en los gráficos, el intervalo rgData
debe ajustarse a su diseño predeterminado en la hoja de datos, o a su versión transpuesta, consulte también Creación de un gráfico con Excel y Ajuste del diseño de datos. Si se va a utilizar la versión predeterminada o la transpuesta se indica ajustando bTransposed
en false
o true
, respectivamente. Para elementos distintos de gráficos, como, por ejemplo, tablas, se ignora el valor de bTransposed
.
target
debe ser una Presentation
o SlideRange
, o un única Slide
, Master
o CustomLayout
.
El nombre strName
se comprueba sin distinguir entre mayúsculas y minúsculas. Debe haberse asignado previamente en PowerPoint utilizando el control de propiedad Nombre de UpdateChart como se describe en 24. Introducción a la automatización.
Para asegurarse de que se seleccionan los elementos correctos, asegúrese de que son los únicos que tienen su Nombre de UpdateChart establecido en strName
en el objeto pasado como pres
.
Si el elemento objetivo está vinculado a un intervalo de datos de Excel, el vínculo se rompe al invocar esta función. Posteriormente, el elemento no quedará vinculado a ningún intervalo de Excel.
25.1.3 Ejemplos
Para utilizar estas muestras, prepare una presentación como se describe en 24. Introducción a la automatización, y guárdela como C:\Samples\UpdateChart\template.pptx
.
VBA
Para usar este ejemplo, añádalo a un módulo en un libro de Excel.
Requiere una referencia a la biblioteca de objetos de Microsoft PowerPoint 16.0 (consulte Visual Basic para Aplicaciones para ver más detalles).
Ejecutar UpdateChart_Sample
en un libro actualizará el gráfico en la plantilla de la presentación con los datos contenidos en el intervalo A1:D5
de su primera hoja.
Option Explicit
Sub UpdateChart_Sample()
' Get the range containing the new data
Dim rng As Excel.Range
Set rng = ActiveWorkbook.Sheets(1).Range("A1:D5")
' 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 be started.
' Otherwise the existing one is used.
Dim ppapp As Object
Set ppapp = New PowerPoint.Application
Dim pres As PowerPoint.Presentation
' PowerPoint window visible
' Set pres = ppapp.Presentations.Open( _
' Filename:="C:\\Samples\\UpdateChart\\template.pptx", _
' Untitled:=msoTrue)
' PowerPoint window invisible
Set pres = ppapp.Presentations.Open( _
Filename:="C:\\Samples\\UpdateChart\\template.pptx", _
Untitled:=msoTrue, _
WithWindow:=msoFalse)
Call tcXlAddIn.UpdateChart(pres, "Chart1", rng, False)
' Save the updated presentation
pres.SaveAs ("C:\\Samples\\UpdateChart\\template_updated.pptx")
pres.Close
ppapp.Quit
End Sub
C#
Para usar esta plantilla, sustituya el código en Program.cs
de la plantilla del proyecto C# aplicación de consola por este.
Requiere referencias a la biblioteca de objetos de Microsoft PowerPoint 16.0, a la biblioteca de objetos de Microsoft Excel 16.0 y a la biblioteca de objetos de Microsoft Office 16.0 (consulte C# para ver más detalles).
Ejecutar la aplicación resultante actualizará el gráfico de la plantilla de presentación para que contenga una única serie llamada “Serie 1” con los valores 1, 2, 3, y guardará el resultado como template_updated.pptx
.
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
namespace ConsoleApplication_UpdateChart
{
class Program
{
static void Main()
{
Excel.Application xlapp = new Excel.Application { Visible = true };
Excel.Workbook workbook = xlapp.Workbooks.Add(1);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
worksheet.Cells[3, 1] = "Series 1";
worksheet.Cells[3, 2] = 1;
worksheet.Cells[3, 3] = 2;
worksheet.Cells[3, 4] = 3;
PowerPoint.Application ppapp = new PowerPoint.Application();
PowerPoint.Presentation presentation = ppapp.Presentations.Open(
"C:\\Samples\\UpdateChart\\template.pptx",
Office.MsoTriState.msoFalse,
Office.MsoTriState.msoTrue
);
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
tcXlAddIn.UpdateChart(
presentation,
"Chart1",
worksheet.get_Range("A1", "D3"),
false
);
presentation.SaveAs("C:\\Samples\\UpdateChart\\template_updated.pptx");
presentation.Close();
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}
25.2 PresentationFromTemplate
25.2.1 Firma
VBA
tcXlAddIn.PresentationFromTemplate( _
wb As Excel.Workbook, _
strTemplate As String, _
ppapp As PowerPoint.Application _
) As PowerPoint.Presentation
C#
PowerPoint.Presentation tcXlAddIn.PresentationFromTemplate(
Excel.Workbook wb,
string strTemplate,
PowerPoint.Application ppapp
);
25.2.2 Descripción
Esta función utiliza los vínculos de datos entre el libro de Excel wb
y la plantilla con nombre de archivo strTemplate
para instanciar dicha plantilla actualizando los elementos vinculados con los datos de los rangos a los que están vinculados. El resultado es una nueva presentación dentro de la instancia de PowerPoint ppapp
.
strTemplate
puede ser una ruta de acceso completa o relativa, que se toma respecto a la ubicación del archivo del libro de Excel wb
.
Todos los elementos de strTemplate
que están vinculados al libro de Excel wb
están actualizados (independientemente de que tengan actualización automática o no). En la presentación resultante, sus vínculos de datos se rompen para evitar que se produzcan más cambios en estos elementos.
Los elementos de strTemplate
que están vinculados a libros Excel diferentes de wb
no sufren cambios y continúan vinculados, de manera que es posible actualizar los vínculos a partir de varios libros de Excel guardando el resultado de esta función como plantilla nueva y, a continuación, llamando de nuevo esta función con el libro siguiente.
Si quiere controlar los colores de segmentos del gráfico o el formato de las celdas de la tabla con el vínculo de Excel, puede establecer la combinación de colores en las opciones Usar relleno de hoja de datos en parte superior (consulte Combinación de colores) o Usar hoja de datos... (consulte Formato de una tabla), respectivamente. De igual forma, para controlar el formato de número con el vínculo de Excel, defínalo como Usar formato de Excel (consulte Formato de número).
Asegúrese de definir las opciones de formato relevantes y el formato de número de las celdas correspondientes en Excel antes de llamar a PresentationFromTemplate
.
25.2.3 Ejemplos
Para utilizar estos ejemplos, cree primero una presentación que contenga un gráfico apilado vinculado al intervalo de la primera hoja de un libro de Excel, como se explica en G1:K4
. Guarde la presentación resultante como C:\Samples\PresentationFromTemplate\template.pptx
y el libro de trabajo como data.xlsx
en el mismo directorio.
VBA
Para utilizar este ejemplo, añádalo a un módulo del libro de Excel data.xlsx
preparado como se ha explicado anteriormente.
Requiere una referencia a la biblioteca de objetos de Microsoft PowerPoint 16.0 (consulte Visual Basic para Aplicaciones para ver más detalles).
Ejecutar PresentationFromTemplate_Sample
cambiará el valor de la celda Sheet1!H3
, que está vinculado al primer valor de la primera serie del gráfico contenido en template.pptx
, de i=1
a 10
, creará una nueva presentación con el gráfico de la plantilla actualizado para contener ese valor, y que ya no está vinculado al libro, y la guardará como output_i.pptx
en el mismo directorio que la plantilla.
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 be started.
' 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#
Para usar esta plantilla, sustituya el código en Program.cs
de la plantilla del proyecto C# aplicación de consola por este.
Requiere referencias a la biblioteca de objetos de Microsoft PowerPoint 16.0, a la biblioteca de objetos de Microsoft Excel 16.0 y a la biblioteca de objetos de Microsoft Office 16.0 (consulte C# para ver más detalles).
Ejecutar la aplicación resultante abrirá visiblemente Excel, cargará el libro data.xlsx
, cambiará el valor de la celda H3
, que está vinculado al primer valor de la primera serie del gráfico contenido en template.pptx
, de i=1
a 10
, creará una nueva presentación con el gráfico de la plantilla actualizado para contener ese valor, y que ya no está vinculado al libro, y la guardará como output_i.pptx
en el mismo directorio que la plantilla.
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();
}
}
}
Gráficos
-
4.Introducción a los gráficos
-
5.Entrada de datos
-
6.Etiquetas de texto
-
7.Gráfico de columnas, gráfico de líneas y gráfico de áreas
-
8.Decoraciones de gráficos
-
9.Gráfico en cascada
-
10.Gráfico Mekko
-
11.Gráfico circular y de anillos
-
12.Gráfico de burbujas y gráfico de dispersión
-
13.Gráfico de Gantt (escala de tiempo)