Integrar Excel en Power Automate sin utilizar tablas predefinidas
Cuando trabajamos con Power Automate, a menudo nos encontramos con la necesidad de leer datos de una hoja de Excel. Sin embargo, Power Automate requiere que estos datos estén en formato de tabla, una premisa que no siempre es viable, especialmente con archivos exportados directamente de un sistema ERP externo.
Para afrontar esta situación, presentamos una solución sencilla que les permitirá actualizar Excel con Power Automate sin necesidad de utilizar el formato de tabla.
Nuestra solución implica la creación automática de una nueva pestaña dentro del Excel, que contendrá los datos originales convertidos en formato de tabla. Esta conversión se realizará mediante un script de Excel que se ejecutará a través de Power Automate. A continuación, detallaremos los pasos necesarios para implementar esta solución:
Preparemos el script para actualizar Excel con Power Automate
1. Comencemos abriendo un Excel de ejemplo como el que queremos leer desde el flujo de Power Automate.
2. Navegamos hasta la pestaña ‘Automate
‘ y seleccionemos ‘New script
‘.
3. Copiamos el siguiente código en el editor de scripts de Excel.
Script
function main(workbook: ExcelScript.Workbook) {
// Nombre de las hojas de cálculo y de la tabla
const data_sheet_name: string = "Sheet1" // Nombre de la hoja donde se encuentran los datos
const copy_sheet_name: string = "Table" // Nombre de la hoja de copia a la que se trasladarán los datos
const table_name: string = "PowerAutomateTable" // Nombre de la nueva mesa creada
//Comprueba si la hoja "Table" ya existe
if (typeof workbook.getWorksheet(copy_sheet_name) === "undefined") {
// Si no existe, crea el hoja "Table"
workbook.addWorksheet(copy_sheet_name)
} else {
// Si existe, la hace invisible, la elimina y después crea un nuevo hoja "Table"
workbook
.getWorksheet(copy_sheet_name)
.setVisibility(ExcelScript.SheetVisibility.hidden) // Hace la hoja invisible
.getWorksheet(copy_sheet_name)
.delete() // Elimina la hoja
workbook
.addWorksheet(copy_sheet_name) // Crear una nueva hoja "Table"
}
// Obtener referencias a las hojas de datos y de copia
let data_sheet =
workbook
.getWorksheet(data_sheet_name) // Obtener la hoja de datos original
let copy_sheet =
workbook
.getWorksheet(copy_sheet_name) // Obtener la nueva hoja "Table"
// Obtener el intervalo de datos utilizado en la hoja de datos
let data_range =
data_sheet
.getUsedRange() // Obtener el intervalo de celdas con datos
//Definir dónde empezará la copia en la hoja "Table"
let copy_to_address = copy_sheet.getRange("A1") // Inicia la copia en la celda A1 de la hoja "Table"
// Copiar los datos en la nueva hoja
copy_to_address.copyFrom(data_range, ExcelScript.RangeCopyType.all) // Copia todos los tipos de datos
// Obtener el intervalo utilizado después de la copia
let copy_range = copy_sheet.getUsedRange() // Intervalo utilizado en la hoja "Table" después de la copia
// Crear una tabla a partir del intervalo de copia y asignarle un nombre
workbook.addTable(copy_range, true).setName(table_name) // Crea una tabla con el nombre especificado
}
4. Modificamos los siguientes parámetros del script según nuestras preferencias y nuestro Excel:
data_sheet_name:
Nombre de la hoja donde residen los datos originales.copy_sheet_name:
Nombre de la hoja donde se copiarán los datos.table_name:
Nombre de la nueva tabla que se creará.
5. Ejecutamos el script y esperemos que finalice.
6. Verificamos que aparezca una nueva pestaña con los datos organizados en formato de tabla.
7. Una vez hemos verificado que el script funciona correctamente, lo guardamos y comprobamos su ubicación (habitualmente dentro de nuestro OneDrive). Es esencial localizar este script para su posterior integración en Power Automate.
8. Buscamos el archivo del script (.osts) en nuestro OneDrive y lo movemos a un SharePoint que deberá ser accesible desde el flujo de Power Automate donde queremos leer el Excel.
Aplicación del script y lectura de la tabla
9. Añadimos “Run script from SharePoint library
” en nuestro flow de PowerAutomate. Configuramos la ubicación donde estará el Excel y la ubicación de nuestro script. Este paso creará la tabla en nuestro Excel, y en caso de que exista, la sustituirá con los nuevos datos.
10. Mediante “Get tables
” recuperamos todas las tablas de nuestro Excel.
11. Recuperamos los datos utilizando “List rows present in a table
”.
Si nuestro Excel tiene más de una tabla, recorremos las tablas recuperadas en el paso anterior hasta encontrar la del nombre configurado en el script (table_name
). Si como en el ejemplo, sabemos seguro que sólo habrá una tabla, podemos recuperar directamente la primera tabla devuelta con:
first(outputs('Get_tables')?['body/value'])?['id']
Esperamos que le haya servido de ayuda este tutorial, y no dude en compartirlo si lo encuentra interesante, o en contactar con nosotros si lo necesita.