Cómo enviar por correo electrónico o guardar imágenes de Excel con Power Automate
Es común en muchas empresas enviar periódicamente resúmenes o informes por correo electrónico a los altos ejecutivos. Los escenarios típicos incluyen informes de ventas diarios o posiciones de flujo de caja. Estos correos electrónicos suelen contener imágenes que muestran la información clave. Con las tecnologías de nube actuales, ahora tenemos una manera fácil de automatizar esto. Entonces, en esta publicación, veremos cómo enviar por correo electrónico o guardar imágenes desde Excel usando Office Scripts y Power Automate.
Tabla de contenido
- Fondo de imágenes en Office Scripts
- Office Script para generar una imagen codificada en Base 64
- Ejemplos
- ° 1: guardar imágenes de Excel en OneDrive o SharePoint
- ° 2: enviar por correo electrónico imágenes de gráficos o rangos de Excel
- ° 3: pegar imágenes entre libros de Excel
- Office Script para pegar una imagen
- Power Automate flujo para pegar imágenes entre libros
- Conclusión
Descargue el archivo de ejemplo: haga clic en el siguiente enlace para descargar el archivo de ejemplo utilizado para esta publicación:
0129 Imágenes de Excel Power Automate.zip Descargar
Fondo de imágenes en Office Scripts
Dentro de Office Scripts existen tres objetos de los que podemos obtener imágenes:
- Rangos : podría ser un rango de celdas (como A1:D10) o un rango con nombre. Nota: No incluye ningún objeto, como formas o gráficos colocados en la parte superior del rango.
- Gráficos : estos son los objetos de gráficos estándar. Nota: los gráficos también se pueden tratar como objetos de forma.
- Formas : esto incluye formas individuales, grupos de formas y gráficos.
Cuando se genera una imagen a partir de rangos, gráficos o formas mediante scripts de Office, estos se crean como cadenas de texto codificadas en Base 64. Este es el texto que representa la imagen.
Esta cadena de texto Base 64 se puede pasar fácilmente a otras aplicaciones, como Power Automate, porque es texto. Luego, esas aplicaciones pueden convertir el texto en objetos de imagen para que el usuario los vea.
Este es el proceso que estamos llevando a cabo en este post.
Office Script para generar una imagen codificada en Base 64
Dependiendo de cómo pretendemos usar la imagen codificada en Base 64 con Power Automate, hay tres formatos que podemos querer usar.
- Texto base 64 : la cadena de texto sin formato generada con los métodos .getImage() o .getImageAsBase64 en Office Scripts
- Texto Base 64 + tipo de imagen : la misma imagen Base 64 que la anterior, pero está precedida por data:image.webp;base64, . Este texto informa a la aplicación destinataria del tipo de imagen, como.webp,.webp, BMP o.webp. Para nuestro ejemplo, todo será.webp.
- Texto Base 64 + tipo de imagen + HTML : el mismo texto Base 64 + tipo de imagen anterior, pero envuelto en etiquetas HTML para que pueda representarse dentro de un correo electrónico HTML.
El script devuelve tres valores base64 , base64img , base64imgHTML . Estos tres valores cubren todos los casos de uso posibles.
El script está pensado para ser reutilizable en cualquier escenario en el que se requiera una imagen. Ha sido escrito para aceptar 4 parámetros:
- libro de trabajo : el libro de trabajo en el que se ejecuta el script de Office.
- wsName : el nombre de la hoja de trabajo que contiene el rango, gráfico o forma.
- objType : la cadena de texto de Rango , Gráfico o Forma que se utiliza para declarar el tipo de objeto.
- objName : este es el nombre de un rango, gráfico o forma específica a partir del cual se genera la imagen.
Copie el siguiente script en el editor de Office Scripts y luego guárdelo. Para este ejemplo, he utilizado el nombre PA – Obtener imagen de Excel .
Los comentarios dentro del script describen cada sección del código.
function main(workbook: ExcelScript.Workbook, wsName: string, objType: string, objName: string) { //Declare the variables let ws = workbook.getWorksheet(wsName); let base64: string; let base64Img: string; let base64ImgHTML: string; //Return image from range or change based on request if (objType == "Range") { base64 = ws.getRange(objName).getImage(); } else if (objType == "Chart") { base64 = ws.getChart(objName).getImage(); } else if (objType == "Shape") { base64 = ws.getShape(objName). getImageAsBase64(ExcelScript.PictureFormat.webp); } //Add image type to the pure base64 base64Img = "data:image.webp;base64," + base64 //Add HTML tags to base64 imgBase64 base64ImgHTML = 'img src="' + base64Img + '"/' //Return the result return {base64, base64Img, base64ImgHTML} }
Ahora estamos listos para usar el script dentro de nuestros flujos de Power Automate.
Ejemplos
Todos los ejemplos siguientes se basan en el siguiente libro de trabajo:
Los elementos clave del ejemplo son:
- Hoja de trabajo llamada Hoja 1
- Rango de celdas que contienen el resumen D3:H5
- Gráfico llamado Gráfico 1
- Imagen llamada Imagen 1
El primer flujo de Power Automate captura una imagen de un rango de Excel y guarda el archivo en OneDrive o SharePoint.
Los parámetros pasados al PA – Obtener imagen del script de Excel son:
- libro de trabajo: /Documentos/_______/0129 Enviar imágenes de Excel en correos electrónicos.xlsx
- wsName: Hoja1
- tipo de objeto: rango
- nombreobj: D3:H5
Estos parámetros garantizan que la imagen devuelta sea del Rango e D3:H5 de la Hoja1 del libro de trabajo seleccionado.
En este flujo, utilizamos el valor de retorno de base64Img para obtener el texto de Base 64. Pero no podemos guardar esta cadena como una imagen; Necesitamos usar la función dataUriToBinary para convertir el texto Base 64 en un archivo de imagen. La función en el parámetro Contenido del archivo del paso Crear archivo es:
=dataUriToBinary(outputs('Run_script')?['body/result/base64Img'])
La función toma la salida imgBase64 del script y la convierte a binario, que se puede guardar como un archivo.webp.
° 2: enviar por correo electrónico imágenes de gráficos o rangos de Excel
Podemos enviar correos electrónicos que contengan imágenes utilizando la acción Enviar un correo electrónico (v2) dentro de Power Automate.
Los parámetros pasados al script son:
- libro de trabajo: /Documentos/_______/0129 Enviar imágenes de Excel en correos electrónicos.xlsx
- wsName: Hoja1
- objType: Gráfico
- objName: Gráfico 1
Estos parámetros garantizan que la imagen devuelta sea el Gráfico 1 de la Hoja 1 del libro de trabajo.
Hay dos formas de enviar imágenes por correo electrónico:
- Incluir imágenes en el cuerpo del correo electrónico : para esto, utilizamos el valor imgBase64HTML devuelto por Office Script. El script ya agregó las etiquetas HTML relevantes, por lo que podemos usar el valor de retorno directamente en el cuerpo del correo electrónico.
- Incluir imágenes como archivos adjuntos : para incluir imágenes como archivos adjuntos, debemos convertir el valor base64Img a un archivo binario. Este es el mismo método que se indica en el flujo n.° 1 anterior.
Es poco probable que alguna vez hagamos ambas cosas, pero se incluyen en el flujo para ilustrar ambos métodos.
Nota: este método tiene una advertencia. Si bien Outlook se complace en trabajar con imágenes codificadas en Base 64 en el cuerpo del correo electrónico, Gmail y algunos otros proveedores de correo electrónico no lo admiten. Permiten imágenes adjuntas pero no imágenes incrustadas en Base 64. Si envía correos electrónicos fuera de su organización, realice algunas pruebas para averiguar si las imágenes se muestran correctamente. Existen algunas soluciones técnicas, pero están fuera del alcance de esta publicación.
° 3: pegar imágenes entre libros de Excel
En el ejemplo final, pasamos una imagen entre dos libros de Excel.
Office Script para pegar una imagen
Ya tenemos un script para convertir la imagen a Base 64, pero ahora necesitamos un segundo script para convertir Base 64 nuevamente a una imagen y colocarla en una hoja de trabajo específica.
El siguiente script acepta 4 argumentos:
- libro de trabajo : este es el libro de trabajo en el que se ejecuta Office Script.
- base64 – El valor del texto obtenido del PA – Obtener imagen del script de Excel
- wsName : el nombre de la hoja de trabajo para colocar la imagen.
- imgName : el nombre que se aplicará a la imagen final.
Copie el siguiente script en el editor de Office Scripts y guárdelo. Para este ejemplo, he utilizado el nombre PA – Pegar imagen en Excel .
function main(workbook: ExcelScript.Workbook, base64: string, wsName: string, imgName: string) { //Declare the workbook let ws = workbook.getWorksheet(wsName); //Declare and add the image let img = ws.addImage(base64) //Change the image name img.setName(imgName); }
Habiendo guardado el script, ahora podemos usarlo en Power Automate.
Power Automate flujo para pegar imágenes entre libros
Este flujo utiliza ambos scripts de Office.
Los parámetros utilizados en el script PA – Obtener imagen desde Excel son
- libro de trabajo: /Documentos/_______/0129 Enviar imágenes de Excel en correos electrónicos.xlsx
- wsName: Hoja1
- tipo de objeto: forma
- objName: Imagen 1
Los parámetros utilizados en el script PA – Pegar imagen en Excel son:
- libro de trabajo: /Documentos/_______/0129 Pegar imagen.xlsx: el nombre del libro de trabajo que recibe la imagen
- base64: base64 – el valor devuelto por el primer script
- wsName: Hoja1
- imgName: NewImage: el nombre que se le dará a la imagen pegada. Esto es necesario si queremos ejecutar más scripts en esta imagen (como moverla o cambiar su tamaño).
Conclusión
Con suerte, estará de acuerdo en que Office Scripts y Power Automate nos brindan muchas opciones para usar imágenes de Excel. Dado que los escenarios requieren información diferente, el script que se presenta en esta publicación devuelve 3 valores para cumplir con los tres casos de uso. Espero que puedas darle un buen uso a esto.
Feliz automatización.
Artículos Relacionados:
- Cómo ejecutar Power Automate desde Excel con Office Scripts o VBA
- Utilice scripts de Office con Power Automate
- Power Automate CSV a Excel (a través de Office Script: método sencillo)
Deja una respuesta