27 julio, 2026

OBTENER CADENA DE VALORES UNICOS DE UN RANGO DE CELDAS

¡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.

Comparte este post

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies