Power Automate CSV a Excel (a través de Office Script: método sencillo)
Los archivos CSV son un formato de archivo común; se utilizan regularmente para exportar datos de sistemas de TI. El escritorio de Excel puede convertir CSV a Excel con facilidad. Sin embargo, en el mundo online de Office 365, las cosas no son tan sencillas. El mundo en línea nos brinda nuevas oportunidades de automatización que no están disponibles en un entorno de escritorio. Sin embargo, desafortunadamente, Power Automate CSV to Excel es más complicado de lo que debería ser. Pero como podemos encontrar muchos escenarios en los que necesitamos convertir CSV a Excel como parte de un proceso de automatización en línea, aprendamos cómo lograrlo con Office Scripts haciendo el trabajo por nosotros.
Tabla de contenido
- El problema con los archivos CSV
- Office Script para analizar un archivo CSV
- Insertar la matriz en un libro de Excel
- Power Automate CSV a Excel a través de scripts de Office
- Conclusión
En esta publicación, veremos un método para convertir CSV en una matriz y luego insertar esa matriz en una hoja de cálculo de Excel. Como se trata de un proceso de dos pasos, podemos cambiar fácilmente el segundo paso para enviar los datos a otros destinos.
En el ejemplo, el flujo se ejecuta como un flujo instantáneo que se ejecuta con solo presionar un botón. Pero también podría lograrse utilizando cualquiera de los otros activadores de Power Automate para una solución más automatizada.
El problema con los archivos CSV
Hay dos problemas importantes al convertir CSV a Excel:
- No existe un estándar único sobre cómo se codifican los archivos CSV. Los entornos Mac, Unix y Windows crean archivos CSV en formatos ligeramente diferentes.
- Los archivos CSV se tratan como cadenas de texto que deben convertirse en una matriz antes de que podamos usarlos.
Ninguno de esos parece ser un problema importante. Sin embargo, incluso el ejemplo utilizado en la documentación de Office Script produce un error al analizar archivos CSV más complejos. Lo que debería ser sencillo resulta no serlo.
Hay conectores premium en Power Automate para convertir CSV a Excel. Estos conectores generalmente funcionan más rápido que el método que se muestra aquí. Esos conectores requieren tarifas de licencia adicionales, por lo que recomiendo investigar los conectores premium sólo si este método no cumple con sus requisitos.
Office Script para analizar un archivo CSV
El siguiente script de Office acepta un archivo CSV como una cadena de texto y luego analiza la cadena carácter por carácter. Cualquier coma o línea nueva contenida entre comillas dobles se trata como texto y se ignora. Pero las comas y las líneas nuevas utilizadas fuera de las comillas se utilizan para dividir la cadena en nuevas filas y columnas.
El resultado final de este script es una matriz.
Lo siguiente se basa en el código de Peter Mortensen en Stack Overflow: https://stackoverflow.com/questions/1293147/example-javascript-code-to-parse-csv-data
function main(workbook: ExcelScript.Workbook,csv: string) { //Crearvariableparaholdthearrayletarr:string[][]=[]; //Crearvariablepara alternar dentro/fuera de comillas dobles //true=inside,false=outsideletinsideQuote=false; //Crear variable para el número de fila y columna actual letr=0;letc=0; //Recorre cada carácter en CSVStringfor(leti=0;icsv.length;i++){ //Crea una variable para mantener los caracteres actuales(cChr)y los siguientes(nChr)letcChr=csv[i];letnChr=csv[i+1]; //Createanewroworcolumnarraysifempty arr[r]=arr[r]||[];arr[r][c]=arr[r][c]||''; //SicChrandnChra tiene ambas comillas dobles, entonces se ignorarán las comillas dobles if(cChr=='"'insideQuotenChr=='"'){ arr[r][c]=arr[r][c]+cChr; yo ++; continuar;} //Si las comillas dobles simples cambian las comillas internas alternar if(cChr=='"'){ insideQuote=!insideQuote; continuar;} //IfacommanotinsideDoublequotes,creaunanuevacolumna if(cChr==','insideQuote==false){ c++; continuar;} // IfnewlineCRLFoutsidedoublequotes,skipnextcreatenewline. if(cChr=='r'nChr=='n'insideQuote==false){ r++; c=0; i++; continue;} //IfnewlineLRoCRoutsidedoublequotes,createnewline if((cChr=='n'| |cChr=='r')insideQuote==false){ r++; c=0; continuar;} //Agregar caracteres sin formato a la matriz arr[r][c]=arr[r][c]+cChr;}return{arr}; }
El script anterior se guardó con el nombre PA – Convertir CSV a matriz.
Es posible que este script no sea la forma más rápida de analizar un archivo CSV. Otros métodos implican expresiones regulares, pero rápidamente pueden volverse muy complejas. El archivo de ejemplo proporcionado en la documentación de Microsoft utiliza expresiones regulares ( https://docs.microsoft.com/en-us/office/dev/scripts/resources/samples/convert-csv ), pero este método falla en archivos CSV más complejos. .
Opté por un código que es más sencillo de entender y que se puede actualizar fácilmente si se encuentran errores en archivos CSV más complejos.
Insertar la matriz en un libro de Excel
En el paso anterior, convertimos el CSV en una matriz. Ahora necesitamos insertar esa matriz en un libro de Excel.
El siguiente script toma dos parámetros:
- la salida del script anterior
- el nombre de la hoja de trabajo donde se deben pegar los datos.
La hoja de trabajo nombrada se borra antes de pegar la matriz, comenzando en la celda A1.
function main(workbook: ExcelScript.Workbook, strArr: string,sheetName: string) {//Convierte strArr en un Arraylet arr: string[][] = JSON.parse(strArr)//Declara la hoja de trabajo para pegar el tolet de datos ws = workbook.getWorksheet(sheetName)//Borrar la hoja de trabajo existente dataws.getRange().clear(ExcelScript.ClearApplyTo.all)//Declarar el rango para pegar los datos en el tolet rng = ws.getRange("A1").getAbsoluteResizedRange (arr.length,arr[0].length)//Pegue el datarng.setValues(arr);}
El script se guardó con el nombre PA – Pegar matriz en un libro de Excel.
Power Automate CSV a Excel a través de scripts de Office
Con los dos scripts de Office anteriores disponibles, podemos usarlos dentro de nuestro flujo de Power Automate. El flujo completo se muestra a continuación.
Notas
Dentro del paso Script – Convertir CSV a matriz , se utiliza un libro llamado Blank File.xlsx; este libro de trabajo no hace nada y puede ser cualquier libro de trabajo. Se espera que los scripts de Office cambien un libro de Excel; por lo tanto, Power Automate requiere que se le dé un nombre a un libro de trabajo. Sin embargo, el script acepta un archivo CSV y devuelve una matriz, no se realizan cambios en el libro, pero aún así debemos nombrar uno.
Si bien en este flujo se utilizan dos scripts de Office, podríamos combinarlos en un solo script. En cambio, se presentan aquí como dos secuencias de comandos para aumentar la flexibilidad, de modo que la matriz se pueda utilizar fácilmente con otros destinos.
El paso denominado Obtener archivo CSV es Obtener el contenido del archivo utilizando la ruta cuyo nombre ha cambiado.
Conclusión
Manejar archivos CSV en Excel online no es tan sencillo como nos gustaría. La conversión de Power Automate de CSV a Excel no es un conector nativo. Sin embargo, esta publicación presentó una manera de lograr la conversión de CSV a Excel sin la necesidad de conectores premium; en su lugar, hemos utilizado las herramientas estándar Power Automate y Office Scripts.
Artículos Relacionados:
- Introducción a los scripts de Office: reunión de Excel en Toronto (YouTube)
- Utilice scripts de Office con Power Automate
Deja una respuesta