¡Hola a todos!
Hace unos días estuve trabajando en un flujo para mejorar la seguridad de mis aplicaciones. Durante uno de los procesos, noté que el tiempo de ejecución era excesivo: ¡más de 6 horas y media para procesar alrededor de 20 mil registros!
Tras analizar el problema, descubrí que una parte del flujo estaba incluyendo elementos duplicados al construir una cadena delimitada por punto y coma, lo cual afectaba significativamente el rendimiento.
Para resolverlo, desarrollé un script que extrae únicamente los elementos únicos antes de generar la cadena delimitada.
Este es el código que implementé:
function main(workbook: ExcelScript.Workbook) {
let hoja = workbook.getActiveWorksheet();
let rangoDatos = hoja.getRange("A:H").getUsedRange();
let valores = rangoDatos.getValues();
let filaInicial = rangoDatos.getRowIndex();
// CREAMOS UN ARRAY QUE LLAMAREMOS RESULTADOS
let resultados: string[][] = [];
// UTILIZAMOS UNA MATRIZ DONDE CADA SUBARRAY TIENE UN STRING CON LOS RESULTADOS UNICOS DE CADA FILA
for (let i = 1; i < valores.length; i++) {
let fila = valores[i].slice(2, 8); // columnas C a H
let valoresUnicos = Array.from(new Set(fila.filter(v => v)));
resultados.push([valoresUnicos.join("; ")]);
}
//PASAMOS DATOS A LA J
let rangoDestino = hoja.getRangeByIndexes(filaInicial + 1, 9, resultados.length, 1);
rangoDestino.setValues(resultados);
}
En esta imagen podéis ver el resultado de aplicar el código en un rango y como en la columna J tenemos los datos que necesitamos. De esta forma, los datos a procesar en el flujo ya no son con duplicados, sino únicos. Como resultado me he ahorrado casi una hora y media de proceso.

Espero que sea de utilidad. Recordad que los scripts de officeScript los podéis ejecutar en Automate muy fácilmente.
