Compartilhar via


Utilizar Scripts do Office e o Power Automate para enviar imagens por e-mail de um gráfico e tabela

Este exemplo utiliza Scripts do Office e o Power Automate para criar um gráfico. Em seguida, envia por e-mail imagens do gráfico e da respetiva tabela base.

Cenário de exemplo

  • Calcule para obter os resultados mais recentes.
  • Criar gráfico.
  • Obter imagens de gráficos e tabelas.
  • Email as imagens com o Power Automate.

Dados de entrada

Uma folha de cálculo a mostrar uma tabela de dados de entrada.

Gráfico de saída

O gráfico de colunas criado a mostrar o montante devido pelo cliente.

Email que foi recebida através do fluxo do Power Automate

O e-mail enviado pelo fluxo que mostra o gráfico do Excel incorporado no corpo.

Solução

Esta solução tem duas partes:

  1. Um Script do Office para calcular e extrair gráficos e tabelas do Excel
  2. Um fluxo do Power Automate para invocar o script e enviar os resultados por e-mail. Para obter um exemplo sobre como fazê-lo, veja Criar um fluxo de trabalho automatizado com o Power Automate.

Configuração: ficheiro do Excel de exemplo

Este livro contém os dados, objetos e formatação esperados pelo script.

Código de exemplo: Calcular e extrair gráficos e tabelas do Excel

Adicione o seguinte script ao livro de exemplo. No Excel, utilize Automatizar>Novo Script para colar o código e guardar o script. Guarde-a como Obter imagem do gráfico e experimente o exemplo!

function main(workbook: ExcelScript.Workbook): ReportImages {
  // Recalculate the workbook to ensure all tables and charts are updated.
  workbook.getApplication().calculate(ExcelScript.CalculationType.full);

  // Get the data from the "InvoiceAmounts" table.
  const sheet1 = workbook.getWorksheet("Sheet1");
  const table = workbook.getWorksheet('InvoiceAmounts').getTables()[0];
  const rows = table.getRange().getTexts();

  // Get only the "Customer Name" and "Amount due" columns, then remove the "Total" row.
  const selectColumns = rows.map((row) => {
    return [row[2], row[5]];
  });
  table.setShowTotals(true);
  selectColumns.splice(selectColumns.length - 1, 1);
  console.log(selectColumns);

  // Delete the "ChartSheet" worksheet if it's present, then recreate it.
  workbook.getWorksheet('ChartSheet')?.delete();
  const chartSheet = workbook.addWorksheet('ChartSheet');

  // Add the selected data to the new worksheet.
  const targetRange = chartSheet.getRange('A1').getResizedRange(selectColumns.length - 1, selectColumns[0].length - 1);
  targetRange.setValues(selectColumns);

  // Insert the chart on sheet 'ChartSheet' at cell "D1".
  const chart = chartSheet.addChart(ExcelScript.ChartType.columnClustered, targetRange);
  chart.setPosition('D1');

  // Get images of the chart and table, then return them for a Power Automate flow.
  const chartImage = chart.getImage();
  const tableImage = table.getRange().getImage();
  return { chartImage, tableImage };
}

// The interface for table and chart images.
interface ReportImages {
  chartImage: string
  tableImage: string
}

Fluxo do Power Automate: Email imagens de gráficos e tabelas

Este fluxo executa o script e envia por e-mail as imagens devolvidas.

  1. Criar um novo fluxo de cloud instantânea.

  2. Selecione Acionar manualmente um fluxo e selecione Criar.

  3. Adicione um Novo passo que utiliza o conector do Excel Online (Empresas) com a ação Executar script . Utilize os seguintes valores para a ação.

    O conector completo do Excel Online (Empresas) no Power Automate.

  4. Este exemplo utiliza o Outlook como cliente de e-mail. Pode utilizar qualquer conector de e-mail suportado pelo Power Automate, mas os restantes passos partem do princípio de que escolheu o Outlook. Adicione um Novo passo que utiliza o conector Office 365 Outlook e a ação Enviar e e-mail (V2). Utilize os seguintes valores para a ação.

    • Para: a sua conta de e-mail de teste (ou e-mail pessoal)
    • Assunto: Reveja os Dados do Relatório
    • Para o campo Corpo , selecione "Vista de Código" (<>) e introduza o seguinte:
    <p>Please review the following report data:<br>
    <br>
    Chart:<br>
    <br>
    <img src="data:image/png;base64,@{outputs('Run_script')?['body/result/chartImage']}"/>
    <br>
    Data:<br>
    <br>
    <img src="data:image/png;base64,@{outputs('Run_script')?['body/result/tableImage']}"/>
    <br>
    </p>
    

    O conector Office 365 Outlook concluído no Power Automate.

  5. Guarde o fluxo e experimente-o. Utilize o botão Testar na página do editor de fluxos ou execute o fluxo através do separador Os meus fluxos . Certifique-se de que permite o acesso quando lhe for pedido.

Vídeo de formação: Extrair e enviar imagens de e-mail de gráficos e tabelas

Veja Sudhi Ramamurthy a percorrer este exemplo no YouTube.