Hola a todos!
Después de haber realizado el ejercicio de pasar datos de una columna a filas por cada elemento entre guiones, con VBA y con Power Query, hoy lo voy a realizar con Typescript, estos son los dos post anteriores:
PASAR DATOS A FILAS SEGÚN ELEMENTOS ENTRE GUIONES UTILIZANDO POWER QUERY
PASAR DATOS A FILAS SEGÚN ELEMENTOS ENTRE GUIONES UTILIZANDO VBA
Para realizar el ejemplo con typescript vamos a usar el mismo ejemplo:

El código usando es el siguiente:
function main(workbook: ExcelScript.Workbook) {
const wsOrigen = workbook.getWorksheet("Hoja1");
const wsDestino = workbook.getWorksheet("Hoja2");
wsDestino.getUsedRange()?.clear(); // Limpia la hoja destino
// Obtenemos todos los datos de origen a la vez
const dataOrigen: (string | number | boolean)[][] = wsOrigen.getUsedRange().getValues();
// Preparamos un nuevo conjunto de datos para destino
const newData: (string | number | boolean)[][] = [];
// Procesa cada fila
dataOrigen.forEach((row, index) => {
if (index === 0) {
newData.push(row); // Agregamos los encabezados
return;
}
// Accedemos al valor de la segunda columna de la fila actual
const cellValue = row[1];
// Verificamos si el valor de la celda es una cadena
if (typeof cellValue === 'string') {
// Dividimos el contenido de la celda por cada guión
const partes = cellValue.split("-");
// Iteramos sobre cada parte del split
partes.forEach(parte => {
// Creamos una nueva fila copiando los valores de la fila original
const newRow = [...row]; // Copiamos la fila original
// Sustituimos el valor de la celda que tenía guiones por cada fragmento obtenido del split en iteraciones sucesivas
newRow[1] = parte; // Sustituimos la columna de guiones
// Agregamos la nueva fila modificada al arreglo de nuevas filas
newData.push(newRow);
});
}
});
// Escribimos los nuevos datos en destino
const destinoRange = wsDestino.getRangeByIndexes(0, 0, newData.length, newData[0].length);
destinoRange.setValues(newData);
destinoRange.getFormat().autofitColumns(); // Ajustamos las columnas
console.log("EL PROCESO FINALIZADO, LOS DATOS HAN PASADO A LA HOJA2");
}
El código está muy comentado, lo he detallado por cada línea de código.
Una vez aplicado el script obtenemos el resultado esperado:

Y esto es todo, espero que sea de utilidad.
