Integrar Excel a PowerAutomate sense utilitzar taules predefinides

Quan treballem amb Power Automate, sovint ens trobem amb la necessitat de llegir dades d’un full d’Excel. No obstant això, PowerAutomate requereix que aquestes dades estiguin en format de taula, una premissa que no sempre és viable, sobretot amb arxius exportats directament d’un sistema ERP extern.
Per afrontar aquesta situació, presentem una solució senzilla que us permetrà actualitzar Excel amb Power Automate sense necessitat d’utilitzar el format de taula.
La nostra solució implica la creació automàtica d’una nova pestanya dins de l’Excel, que contindrà les dades originals convertides en format taula. Aquesta conversió es realitzarà mitjançant un script d’Excel que s’executarà a través de PowerAutomate. A continuació, detallarem els passos necessaris per implementar aquesta solució:
Preparem l’script per actualitzar Excel amb Power Automate
1. Comencem obrint un Excel d’exemple com el que volem llegir des del flow de PowerAutoamte.
2. Naveguem fins a la pestanya ‘Automate
‘ i seleccionem ‘New script
‘.

3. Copiem el següent codi a l’editor de scripts de l’Excel.

Script
function main(workbook: ExcelScript.Workbook) {
// Noms de les fulles de càlcul i de la taula
const data_sheet_name: string = "Sheet1" // Nom de la fulla on es troben les dades
const copy_sheet_name: string = "Table" // Nom de la fulla de còpia on es traslladaran les dades
const table_name: string = "PowerAutomateTable" // Nom de la nova taula creada
// Comprova si la fulla "Table" ja existeix
if (typeof workbook.getWorksheet(copy_sheet_name) === "undefined") {
// Si no existeix, crea la fulla "Table"
workbook.addWorksheet(copy_sheet_name)
} else {
// Si existeix, la fa invisible, l'elimina i després crea una nova fulla "Table"
workbook
.getWorksheet(copy_sheet_name)
.setVisibility(ExcelScript.SheetVisibility.hidden) // Fa la fulla invisible
.getWorksheet(copy_sheet_name)
.delete() // Elimina la fulla
workbook
.addWorksheet(copy_sheet_name) // Crea una nova fulla "Table"
}
// Obtenir referències a les fulles de dades i de còpia
let data_sheet =
workbook
.getWorksheet(data_sheet_name) // Obtenir la fulla de dades original
let copy_sheet =
workbook
.getWorksheet(copy_sheet_name) // Obtenir la nova fulla "Table"
// Obtenir l'interval de dades utilitzat en la fulla de dades
let data_range =
data_sheet
.getUsedRange() // Obtenir l'interval de cèl·lules amb dades
// Definir on començarà la còpia a la fulla "Table"
let copy_to_address = copy_sheet.getRange("A1") // Inicia la còpia a la cel·la A1 de la fulla "Table"
// Copiar les dades a la nova fulla
copy_to_address.copyFrom(data_range, ExcelScript.RangeCopyType.all) // Copia tots els tipus de dades
// Obtenir l'interval utilitzat després de la còpia
let copy_range = copy_sheet.getUsedRange() // Interval utilitzat en la fulla "Table" després de la còpia
// Crear una taula a partir de l'interval de còpia i assignar-li un nom
workbook.addTable(copy_range, true).setName(table_name) // Crea una taula amb el nom especificat
}
4. Modifiquem els següents paràmetres de l’script segons les nostres preferències i el nostre Excel:
data_sheet_name:
Nom del full on resideixen les dades originals.copy_sheet_name:
Nom del full on es copiaran les dades.table_name:
Nom de la nova taula que es crearà.
5. Executem l’script i esperem que finalitzi.

6. Verifiquem que apareixi una nova pestanya amb les dades organitzades en format de taula.

7. Un cop hem verificat que l’script funciona correctament, el guardem i comprovem la seva ubicació (habitualment dins del nostre OneDrive). És essencial localitzar aquest script per a la seva posterior integració en PowerAutomate.

8. Busquem l’arxiu de l’script (.osts) en el nostre Onedrive i el movem en un Sharepoint que haurà de ser accessible des del flow de PowerAutomate on volem llegir l’Excel.

Aplicació de l’script i lectura de la taula
9. Afegim “Run script from SharePoint library
” en el nostre flow de PowerAutomate. Configurem la ubicació on hi haurà l’Excel i la ubicació del nostre script. Aquest pas, crearà la taula en el nostre Excel, en cas que existeixi, la substituirà amb les noves dades.

10. Mitjançant “Get tables
” recuperem totes les taules del nostre Excel.

11. Recuperem les dades utilitzant “List rows present in a table
”.
Si el nostre Excel té més d’una taula, recorrem les taules recuperades en el pas anterior fins trobar la del nom configurat en el script (table_name
). Si com en l’exemple, sabem segur que només hi haurà una taula, podem recuperar directament la primera taula retornada amb:
first(outputs('Get_tables')?['body/value'])?['id']

Esperem que us hagi servit d’ajuda aquest tutorial, i no dubteu en compartir-ho si ho trobeu interessant, o en contactar amb nosaltres si ho necessiteu.