25. Automação com dados do Excel

Quando os dados são fornecidos no Excel, você pode usar as funções UpdateChart e PresentationFromTemplate para controlar programaticamente usando esses dados.

Com UpdateChart você exporta a planilha de dados de um elemento específico com seus dados no Excel. Com PresentationFromTemplate você usa seus dados para criar uma nova apresentação com base em um modelo do PowerPoint com os elementos do think-cell vinculados aos intervalos de dados no Excel, conforme descrito em 21. Links de dados do Excel.

A interface para as funções é integrada ao modelo de Automação do Office, portanto pode ser acessada a partir de qualquer linguagem com a qual seja possível programar o Office, como Visual Basic for Applications (VBA) ou C#. Consulte Introdução para instruções detalhadas.

O ponto de entrada no think-cell é o objeto de suplemento do think-cell. Pode ser acessado através da coleção Application.COMAddIns. As chamadas ao think-cell sempre são ligadas tardiamente. Consulte a base de dados de conhecimento da Microsoft para obter uma explicação:

Usando ligação precoce e tardia na automação

Assim, o tipo de objeto do suplemento do think-cell é simplesmente Object, sem nenhuma biblioteca de tipos nem referências a serem adicionadas. Basta adquirir o objeto, e já será possível fazer mais chamadas. Por exemplo, na VBA no Excel:

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

Na C#, você pode alcançar uma ligação tardia ao declarar a referência ao suplemento do think-cell como dynamic; esse também é o tipo presumido pelo compilador ao declarar a referência como var, então você pode simplesmente escrever:

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

Aqui xlapp está uma referência a um objeto do Excel.Application no qual o think-cell foi carregado.

25.1
Atualizargráfico
25.2
Apresentaçãoapartirdomodelo

25.1 Atualizargráfico

25.1.1 Assinatura

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 Descrição

Esta função atualiza todos os elementos no target com nome strName com os dados contidos no rgData. Para que os dados sejam interpretados corretamente para gráficos, o intervalo rgData deve estar alinhado ao seu layout da planilha de dados padrão, ou sua versão transposta; consulte também Criar gráfico a partir do Excel e Ajustando o layout de dados. A informação sobre se deve ser usada a versão padrão ou transposta é indicada pela configuração bTransposed para false ou true, respectivamente. Para elementos que não são gráficos, tabelas por exemplo, o valor de bTransposed é ignorado.

target deve ser Presentation ou SlideRange, ou um único Slide, Master ou CustomLayout.

O nome strName não diferencia maiúsculas e minúsculas. Isso deve ter sido atribuído anteriormente no PowerPoint usando o controle de propriedade Nome de UpdateChart como descrito em 24. Introdução à automação.

Para garantir que os elementos corretos sejam direcionados, certifique-se de que eles sejam os únicos com seu Nome de UpdateChart configurado para strName no objeto passado como pres.

Se um elemento direcionado estiver vinculado a algum intervalo de dados do Excel, ao invocar essa função, o vínculo será quebrado. Depois, o elemento não será vinculado a qualquer intervalo do Excel.

25.1.3 Exemplos

Para usar esses exemplos, prepare uma apresentação conforme descrito no 24. Introdução à automação, e a salve como C:\Samples\UpdateChart\template.pptx.

VBA

Para usar esta amostra adicione-a a um módulo e, uma pasta de trabalho do Excel.

Ela requer uma referência à biblioteca de objetos do Microsoft PowerPoint 16.0 (consulte Visual Basic for Applications para obter mais detalhes).

Ao executar UpdateChart_Sample em uma pasta de trabalho, o gráfico no modelo de apresentação será atualizado com os dados contidos no intervalo A1:D5 da sua primeira planilha.

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 amostra, insira-a no lugar do código no Program.cs do modelo de projeto do aplicativo Console da C#.

São necessárias referências à biblioteca de objetos do Microsoft PowerPoint 16.0, biblioteca de objetos do Microsoft Excel 16.0 e biblioteca de objetos do Microsoft Office 16.0 (consulte C# para obter mais detalhes).

Ao executar o aplicativo resultante, o gráfico será atualizado no modelo de apresentação e exibirá uma única série chamada "Série 1", com valores 1, 2, 3, e o resultado será salvo 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 Apresentaçãoapartirdomodelo

25.2.1 Assinatura

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 Descrição

Esta função usa os vínculos de dados entre a pasta de trabalho do Excel wb e o modelo com nome de arquivo strTemplate para instanciar o modelo atualizando os elementos vinculados com os dados dos intervalos ao quais estão vinculados. O resultado é uma nova apresentação dentro da instância do PowerPoint ppapp.

strTemplate pode ser um caminho inteiro ou relativo, que é então tomado para ser relativo à localização do arquivo da pasta de trabalho do Excel wb.

Todos os elementos em strTemplate que estão vinculados à pasta de trabalho wb do Excel são atualizados (independentemente se estão definidos para atualização automática ou não). Na apresentação resultante, os vínculos de dados estão corrompidos para impedir que esses elementos sejam alterados no futuro.

Os elementos em strTemplate, que são vinculados a pastas de trabalho do Excel que não wb, são deixados sem modificação e ainda vinculados, para ser possível atualizar vínculos de várias pastas de trabalho do Excel, salvando o resultado dessa função como novo modelo e chamando novamente essa função com a próxima pasta de trabalho.

Se você deseja controlar as cores dos segmentos do gráfico ou a formatação das células da tabela com o link do Excel, você pode configurar o esquema de cores para Usar preenchimento da planilha de dados como preferência (consulte Esquema de cores) ou as opções de Usar preenchimento da planilha de dados... (consulte Formatar uma tabela), respectivamente. Da mesma forma, para controlar o formato de número com o link do Excel, configure-o como Usar formatação do Excel (veja Formato de número).

Certifique-se de definir as opções de formatação relevantes e o formato de número das células respectivas no Excel antes de chamar PresentationFromTemplate.

25.2.3 Exemplos

Para usar essas amostras, primeiro crie uma apresentação contendo um gráfico empilhado vinculado ao intervalo G1:K4 da primeira planilha em uma pasta de trabalho do Excel, conforme explicado em Criar gráfico a partir do Excel. Salve a apresentação resultante como C:\Samples\PresentationFromTemplate\template.pptx, e a pasta de trabalho como data.xlsx, no mesmo diretório.

VBA

Para usar esta amostra, adicione-a ao módulo na pasta de trabalho data.xlsx do Excel, preparada conforme explicado acima.

Ela requer uma referência à biblioteca de objetos do Microsoft PowerPoint 16.0 (consulte Visual Basic for Applications para obter mais detalhes).

Ao executar PresentationFromTemplate_Sample, o valor na célula Sheet1!H3, que está vinculado ao primeiro valor da primeira série de planilhas contidas em template.pptx, de i=1 a 10, será alterado, será criada uma nova apresentação com o gráfico no modelo atualizado, que passará a exibir esse valor, e que não está vinculado à pasta de trabalho, e será salvo como output_i.pptx no mesmo diretório que do modelo.

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 amostra, insira-a no lugar do código no Program.cs do modelo de projeto do aplicativo Console da C#.

São necessárias referências à biblioteca de objetos do Microsoft PowerPoint 16.0, biblioteca de objetos do Microsoft Excel 16.0 e biblioteca de objetos do Microsoft Office 16.0 (consulte C# para obter mais detalhes).

Ao executar o aplicativo resultante, o Excel abrirá e ficará visível, a pasta de trabalho data.xlsx será carregada, o valor na célula H3, que está vinculado ao primeiro valor da primeira série de planilhas contidas em template.pptx, de i=1 a 10, será alterado, será criada uma nova apresentação com o gráfico no modelo atualizado, que passará a exibir esse valor, e que não está vinculado à pasta de trabalho, e será salvo como output_i.pptx no mesmo diretório que do modelo.

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

Compartilhar