Hola a todos;
La semana pasada publiqué un post en el que mostraba un ejemplo de cómo formatear y mover datos entre hojas utilizando typescript, este es: UTILIZANDO TYPESCRIPT PARA FORMATEAR Y MOVER DATOS ENTRE HOJAS
Pues bien, hoy me gustaría compartir con todos vosotros el ejemplo que ha tenido la cortesía de elaborar Jakob Nielsen, Principal Designer en Microsoft Office. Donde partiendo del mismo ejemplo y buscando el mismo resultado ha programado una solución distinta y mejorada con typescript.
Compartir información genera sinergias que se traducen en creación de conocimiento. Este es el espíritu de Excel Signum, el contribuir de forma desinteresada a la búsqueda de conocimiento y ayuda en las comunidades técnicas. Y que coincide con uno de los máximos principios del programa MVP, la ayuda y contribución desinteresada en las comunidades técnicas.
Os comparto aquí el código:
function main(workbook: ExcelScript.Workbook)
{
// Get the original values
const originalSheet = workbook.getWorksheet("ORIGINAL");
const originalValues = originalSheet.getUsedRange().getValues();
// Compute the formatted values
const formattedValues: (string | number | boolean )[][] = [[ "ID", "EDAD", "GENERO" ]];
originalValues.splice(1).forEach((row) => {
/* EDAD */
let ageGroup = "";
const edad = row[3];
if (edad < 18) {
ageGroup = "";
} else if (edad <= 25) {
ageGroup = "18 a 25";
} else if (edad <= 35) {
ageGroup = "26 a 35";
} else if (edad <= 45) {
ageGroup = "36 a 45";
} else if (edad <= 55) {
ageGroup = "46 a 55";
} else if (edad <= 65) {
ageGroup = "56 a 65";
}
/* GENERO */
let genero = "";
switch (row[4].toString().toUpperCase() /* SEXO */) {
case "MUJER":
genero = "FEMENINO";
break;
case "HOMBRE":
genero = "MASCULINO";
break;
default:
genero = "*ERROR*";
}
formattedValues.push(
[row[0] /* ID */, ageGroup, genero ]
)
});
const formattedSheet = workbook.getWorksheet("FORMATEADA");
// Delete the old content on the output worksheet
const oldFormattedRange = formattedSheet.getUsedRange();
if (oldFormattedRange) {
oldFormattedRange.clear(ExcelScript.ClearApplyTo.all);
}
// Add the new content to the output sheet.
const newFormattedRange = formattedSheet.getRangeByIndexes(0, 0, formattedValues.length, formattedValues[0].length);
newFormattedRange.setValues(formattedValues);
// Autofit the columns to the new content and activate the sheet
newFormattedRange.getFormat().autofitColumns();
formattedSheet.activate();
}
Para comenzar, es interesante ver programada la instrucción switch Case, muy similar a Select Case de VBA y que aquí podemos ver en typescript:
/* GENERO */
let genero = "";
switch (row[4].toString().toUpperCase() /* SEXO */) {
case "MUJER":
genero = "FEMENINO";
break;
case "HOMBRE":
genero = "MASCULINO";
break;
default:
genero = "*ERROR*";
}
Por otra parte también tenemos el condicional y el else if ligeramente modificado en el que se reduce la longitud del código y por lo tanto se eficienta.
/* EDAD */
let ageGroup = "";
const edad = row[3];
if (edad < 18) {
ageGroup = "";
} else if (edad <= 25) {
ageGroup = "18 a 25";
} else if (edad <= 35) {
ageGroup = "26 a 35";
} else if (edad <= 45) {
ageGroup = "36 a 45";
} else if (edad <= 55) {
ageGroup = "46 a 55";
} else if (edad <= 65) {
ageGroup = "56 a 65";
}
y si en en mi caso utilizaba una instrucción For, en el que nos plantea Jakob utiliza una instrucción «For Each» para ir verificando cada uno de los elementos o ítems de la tabla.
Por último resaltar que va almacenando el resultado en una matriz y luego la pasa a la hoja «FORMATEADA» utilizando la función getRangeByIndexes().
Sin duda, hay muchos elementos de este código que podemos tener en cuenta para futuros proyectos y que pueden facilitar enormemente el trabajo.
Espero que os haya resultado interesante y os sea de utilidad! y de nuevo dar las gracias a Jakob por la aportación y ayuda realizada, así da gusto 🙂
Saludos y hasta el próximo post.
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies