Automação com dados do Excel

No Windows, você pode usar funções de API think-cell para criar programaticamente apresentações think-cell com dados do Excel.

Introdução à automação com dados do Excel

Somente Windows

A automação do Excel é mais vantajosa quando você precisa gerar regularmente relatórios grandes sem atualizar manualmente os dados a cada vez. Para tarefas de gráficos menores ou ad hoc, recomendamos usar o Criar elementos a partir do Excel.

Para criar uma cópia de um modelo do PowerPoint e atualizar todos os think-cell elementos na apresentação copiada que estão vinculados a uma pasta de trabalho do Excel (consulte Criar elementos a partir do Excel), use a função PresentationFromTemplate.

Para atualizar elementos específicos think-cell em um modelo do PowerPoint, independentemente de estarem vinculados ao Excel, use a API UpdateBatch. UpdateBatch substituiu UpdateChart (obsoleto). No entanto, se o seu código existente usar UpdateChart, esse código ainda funcionará.

A API do think-cell e a automação do Office

A API think-cell é integrada ao Component Object Model (COM) da Microsoft, para que você possa acessar a API em qualquer idioma com o qual possa programar o Office, como Visual Basic for Applications (VBA) ou C#. Para obter instruções sobre como usar VBA e C#, consulte Comece a usar a API do think-cell.

O ponto de entrada no think-cell é o objeto suplemento think-cell. Você pode acessar o objeto por meio da coleção Application.COMAddIns. As chamadas ao think-cell sempre são ligadas tardiamente (consulte Microsoft Learn). Assim, o tipo do objeto suplemento think-cell é simplesmente Object, e você não precisa adicionar nenhuma Library de tipos ou referência. Depois de adquirir o objeto, você estará pronto para fazer chamadas. Por exemplo, no VBA no Excel, use o seguinte código:

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

Em C#, você pode obter ligação tardia declarando a referência ao objeto suplemento think-cell como dynamic. Quando você declara a referência como var, o compilador infere que o objeto é do tipo dynamic, para que você possa simplesmente usar o seguinte código. Aqui, xlapp é uma referência a um objeto Excel.Application que carrega think-cell.

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

Corresponder layouts de dados do Excel e do modelo

Para exibir corretamente seus dados no gráfico correspondente, o layout dos dados no Excel deve corresponder ao layout da planilha de dados do gráfico no modelo (consulte Transpor e editar o layout de dados de intervalos vinculados). Por exemplo, se você adicionar a linha 100%= no gráfico modelo, o think-cell interpreta a segunda linha dos seus dados do Excel como os totais a partir dos quais as porcentagens são calculadas.

A tabela a seguir resume as opções comuns de layout de dados, sua posição no layout de dados e sua configuração padrão. Para verificar o layout dos dados de um gráfico específico, clique duas vezes no gráfico para abrir sua planilha de dados.

Data layout option

Contents

Position

Default setting

Series

Rótulos de série

Coluna 1

Selecionado

Category

Rótulos de categoria

Linha 1

Selecionado

100%=

Totais para cálculos de porcentagem

Linha 2 (se Category selecionada)
Linha 1 (se Category não selecionada)

Não selecionado

Corresponder formatação de elemento ao Excel

Você pode combinar a formatação de seus elementos, como formato de número, preenchimento e cor da fonte, com a formatação na pasta de trabalho do Excel. Antes de ligar para PresentationFromTemplate ou UpdateBatch, na pasta de trabalho do Excel, aplique a formatação desejada. Em seguida, no modelo do PowerPoint, combine o formato do número do elemento, a formatação da fonte, o preenchimento ou as bordas com a pasta de trabalho do Excel (consulte Combinar a formatação de elementos ao intervalo de dados vinculado).

ApresentaçãoaPartirdoModelo

Somente Windows

A função PresentationFromTemplate cria uma cópia de um modelo do PowerPoint e atualiza todos os elementos think-cell na apresentação copiada que estão vinculados a uma pasta de trabalho do Excel. Para obter mais informações sobre elementos vinculados think-cell, consulte Criar elementos a partir do Excel.

ApresentaçãoDeAssinatura do modelo

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

ApresentaçãoDeDescrição do modelo

PresentationFromTemplate leva os seguintes argumentos:

  • Workbook refere-se à pasta de trabalho do Excel que contém seus dados.
  • Template refere-se ao modelo do PowerPoint que contém os elementos que você deseja preencher com dados. Para preencher um elemento com dados, ele deve ser vinculado a um intervalo no Workbook (consulte Criar elementos a partir do Excel). O Template pode especificar um caminho relativo do local do Workbook ou de um caminho absoluto.
  • PpApplication refere-se à instância do PowerPoint que gera a nova apresentação.

PresentationAsTemplate cria uma cópia do Template e atualiza todos os elementos na apresentação copiada que estão vinculados ao Workbook, independentemente de você ter definido os elementos para atualização automática (consulte Gerenciar os dados em elementos vinculados).

Na nova apresentação, PresentationFromTemplate quebra intencionalmente os links do Excel dos elementos atualizados para evitar atualizações adicionais inadvertidas. No entanto, os elementos que a função não atualiza mantêm suas ligações com o Excel. Isso significa que você pode atualizar links de várias pastas de trabalho do Excel. Para isso, após criar sua nova apresentação, chame o PresentationFromTemplate novamente com sua próxima pasta de trabalho e use a apresentação que você acabou de criar como modelo.

Exemplos de ApresentaçãoaPartirdoModelo

Para usar esses exemplos, primeiro crie uma apresentação contendo um gráfico de coluna empilhada vinculado ao intervalo G1:K4 na primeira planilha de uma pasta de trabalho do Excel (consulte Criar gráficos a partir do Excel). Salve a apresentação como C:\Samples\PresentationFromTemplate\template.pptx, e a pasta de trabalho como data.xlsx, no mesmo diretório.

VBA

Neste exemplo, no Sheet1, o procedimento PresentationFromTemplate_Sample() altera o valor de H3 de i=1 para 10. O H3 está vinculado ao primeiro valor na primeira série do gráfico de coluna empilhada. Para cada novo valor de H3, o PresentationFromTemplate_Sample() faz o seguinte:

  1. Faz uma cópia de template.pptx.
  2. Na apresentação copiada, atualiza o gráfico com o novo valor.
  3. Quebra o link do Excel do gráfico.
  4. No mesmo diretório que o modelo, salva a nova apresentação como output_i.pptx.

Para usar este exemplo, na pasta de trabalho do Excel data.xlsx que você criou anteriormente, crie um módulo com o seguinte procedimento. O módulo requer uma referência ao Microsoft PowerPoint 16.0 Object Library (consulte 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#

Neste exemplo, o programa abre o Excel e carrega o data.xlsx. Em seguida, no Sheet1, o programa altera o valor de H3 de i=1 para 10. O H3 está vinculado ao primeiro valor na primeira série do gráfico de coluna empilhada. Para cada novo valor de H3, o programa faz o seguinte:

  1. Faz uma cópia de template.pptx.
  2. Na apresentação copiada, atualiza o gráfico com o novo valor.
  3. Quebra o link do Excel do gráfico.
  4. No mesmo diretório que o modelo, salva a nova apresentação como output_i.pptx.

Para usar este exemplo, no modelo de Console App projeto C#, substitua o código no Program.cs pelo seguinte. O programa requer referências ao Microsoft PowerPoint 16.0 Object Library, ao Microsoft Excel 16.0 Object Library e ao 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();
		}
	}
}

Atualizarlote

Somente Windows

Com a API UpdateBatch, especifique quais elementos think-cell em um modelo do PowerPoint serão atualizados com novos dados do Excel. Você pode atualizar elementos independentemente de estarem vinculados ao Excel.

UpdateBatch substituiu UpdateChart (obsoleto). Embora o código existente que UpdateChart o usa ainda funcione, é por isso que recomendamos que você use UpdateBatch:

  • Nova funcionalidade, como o preenchimento de imagens de tabelas com dados do Excel (consulte Inserir imagens de tabelas), está disponível apenas no UpdateBatch.
  • Com versões think-cell mais recentes, UpdateChart pode ser muito lento, especialmente com grandes apresentações.

AtualizarAssinaturas do lote

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

AtualizarDescrição do lote

UpdateBatch contém as seguintes funções:

  • CreateUpdate cria um objeto para armazenar todos os elementos que você deseja atualizar e seus intervalos de dados do Excel correspondentes.
  • AddRangeData programa uma atualização para um gráfico, tabela, campo de texto de automação, Harvey Ball, caixa de seleção ou imagem que você deseja preencher com dados do Excel.
  • AddRangeImage programa uma atualização para uma imagem de uma tabela que você deseja preencher com dados do Excel (consulte Inserir imagens de tabelas).
  • Send coleta os dados do Excel e os envia para o PowerPoint para criar uma apresentação. Se o seu código tem como alvo elementos vinculados ao Excel no seu modelo do PowerPoint, esses links serão quebrados (consulte Criar elementos a partir do Excel).

AddRangeData e AddRangeImage pegam os seguintes argumentos:

  • Target refere-se ao modelo do PowerPoint que contém os elementos que você deseja preencher com dados. Target pode ser um Presentation, SlideRange, Slide, Master, ou CustomLayout.
  • Name refere-se a um elemento com um AddRangeData ou AddRangeImage nome. Antes de executar o UpdateBatch, você deve atribuir o nome no modelo do PowerPoint usando AddRangeData Name ou AddRangeImage Name (consulte Criar modelos de PowerPoint para automação de relatórios). Os nomes não diferenciam maiúsculas de minúsculas. Se dois elementos dentro de Target tiverem o mesmo nome, think-cell os preenche com os mesmos dados.
  • Range refere-se ao intervalo do Excel que contém os dados para o elemento.
  • Transposed (AddRangeData somente): Para trocar a orientação das linhas e colunas na planilha de dados do elemento atualizado (consulte Transpor e editar o layout de dados de intervalos vinculados), defina Transposed como True. Se a orientação dos dados do elemento corresponder à orientação dos dados do Excel, defina Transposed como False.

Exemplos de Atualizarlote

Os exemplos de código VBA e C# a seguir atualizam três elementos no modelo do PowerPoint com os dados da primeira planilha de uma pasta de trabalho do Excel. Os exemplos salvam a apresentação resultante como template_updated.pptx.

Para usar esses exemplos, crie um modelo do PowerPoint com think-cell elementos e uma pasta de trabalho do Excel com dados para preencher os elementos.

Para criar o modelo do PowerPoint, siga estas etapas:

  1. Crie uma apresentação do PowerPoint com um título de slide e um gráfico, conforme descrito em Exemplo de modelo do PowerPoint.
  2. Na apresentação, adicione uma imagem de uma tabela (consulte Inserir imagens de tabelas).
  3. Abra a minibarra de ferramentas da tabela. Em AddRangeImage Name, insira TableAsImage1. Selecione Enter.
  4. Salve a apresentação em C:\Samples\UpdateBatch\template.pptx.

Para criar a pasta de trabalho do Excel, siga estas etapas:

  1. Abra uma pasta de trabalho do Excel.
  2. Em A1, insira um título de slide.
  3. Em A2:D5, insira os dados do gráfico. Certifique-se de que o layout dos dados no Excel corresponda ao layout da planilha de dados dos gráficos no modelo do PowerPoint (consulte Corresponder layouts de dados do Excel e do modelo).
  4. Em A7:D10, insira os dados da tabela. Qualquer formatação de tabela que você aplicar, como preenchimentos e bordas, aparecerá na nova apresentação.
  5. Salve a pasta de trabalho em C:\Samples\UpdateBatch\data.xlsx.

Ao especificar caminhos em seus UpdateBatch procedimentos, use uma barra invertida dupla (\\) como separador de diretórios.

VBA

Para usar este exemplo de código, na pasta de trabalho do Excel que você criou anteriormente, crie um módulo com o seguinte procedimento. O módulo requer uma referência ao Microsoft PowerPoint 16.0 Object Library. Para obter mais informações, consulte 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#

Para usar este exemplo de código, no modelo de Console App projeto C#, substitua o código no Program.cs pelo seguinte.

O programa requer referências ao Microsoft PowerPoint 16.0 Object Library, ao Microsoft Excel 16.0 Object Library e ao Microsoft Office 16.0 Object Library. Para obter mais informações, 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();
		}
	}
}

AtualizarGráfico (obsoleto)

Somente Windows

O UpdateChart atualiza a planilha de dados de um elemento específico com seus dados do Excel.

UpdateBatch substituiu UpdateChart (consulte Atualizarlote). Embora o código existente que UpdateChart o usa ainda funcione, é por isso que recomendamos que você use UpdateBatch para o novo código:

  • Nova funcionalidade, como o preenchimento de imagens de tabelas com dados do Excel (consulte Inserir imagens de tabelas), está disponível apenas no UpdateBatch.
  • Com versões think-cell mais recentes, UpdateChart pode ser muito lento, especialmente com grandes apresentações.

AtualizarAssinatura do gráfico

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