Usar Scripts do Office e Power Automate para enviar imagens por email de um gráfico e uma tabela
Este exemplo usa Scripts do Office e Power Automate para criar um gráfico. Em seguida, ele envia imagens do gráfico e sua tabela base.
Cenário de exemplo
- Calcule para obter os resultados mais recentes.
- Criar gráfico.
- Obtenha gráfico e imagens de tabela.
- Email as imagens com o Power Automate.
Dados de entrada
Gráfico de saída
Email que foi recebido por meio do fluxo do Power Automate
Solução
Essa solução tem duas partes:
- Um Script do Office para calcular e extrair gráfico e tabela do Excel
- Um fluxo do Power Automate para invocar o script e enviar os resultados por email. Para obter um exemplo sobre como fazer isso, consulte Criar um fluxo de trabalho automatizado com o Power Automate.
Instalação: Exemplo de arquivo do Excel
Esta pasta de trabalho contém os dados, objetos e formatação esperados pelo script.
Código de exemplo: calcular e extrair gráfico e tabela do Excel
Adicione o script a seguir à pasta de trabalho de exemplo. No Excel, use Automatizar>Novo Script para colar o código e salvar o script. Salve-a como Obter imagem do gráfico e experimente a amostra por conta própria!
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
}
Power Automate flow: Email as imagens do gráfico e da tabela
Esse fluxo executa o script e envia emails às imagens retornadas.
Crie um novo fluxo de nuvem instantânea.
Escolha Disparar manualmente um fluxo e selecione Criar.
Este exemplo requer recursos do Power Automate que não têm suporte no novo designer de fluxo (adicionando HTML a um email). Alterne para o designer antigo com o alternância no canto superior direito da tela.
Adicione uma nova etapa que usa o conector do Excel Online (Business) com a ação Executar script . Use os valores a seguir para a ação.
- Localização: OneDrive for Business
- Biblioteca de Documentos: OneDrive
- Arquivo: email-chart-table.xlsx (selecionado com o seletor de arquivo)
- Script: Obter imagem do gráfico
Este exemplo usa o Outlook como o cliente de email. Você pode usar qualquer suporte do Power Automate do conector de email, mas o restante das etapas pressupõe que você escolheu o Outlook. Adicione uma nova etapa que usa o conector Office 365 Outlook e a ação Enviar e enviar email (V2). Use os valores a seguir para a ação.
- Para: sua conta de email de teste (ou email pessoal)
- Assunto: Examine os dados do relatório
- Para o campo Corpo , selecione "Exibição de Código" (
</>
) e insira 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>
Salve o fluxo e experimente-o. Use o botão Testar na página do editor de fluxo ou execute o fluxo por meio da guia Meus fluxos . Certifique-se de permitir o acesso quando solicitado.