Hola a todos,
Hoy vamos con otro post sobre typescript, en concreto voy a trabajar con los datos de un rango para extraer con typescript el primer y último elemento de un rango que sea distinto de vacío.
Vamos a utilizar la columna A y el rango A2:A30:

El código que usaremos es el siguiente:
function main(workbook: ExcelScript.Workbook) {
//definimos hoja
var miHoja = workbook.getWorksheet("Hoja1");
//definimos rango
var miRango = miHoja.getRange("A2:A30");
//obtenemos todos los valores del rango
var miArray = miRango.getValues();
// aplicamos función reductora y generamos array con todos los datos
var valores = miArray.reduce((acum, val) => acum.concat(val), []);
console.log(valores)
//obtenemos primer valor
var primerValor = valores.find(valor => valor !== '');
//obtenemos último valor
var ultimoValor = valores.reverse().find(valor => valor !== '');
var tit = [
["PRIMER VALOR", "ULTIMO VALOR"]
];
miHoja.getRange("C1:D1").setValues(tit);
var val = [
[primerValor, ultimoValor]
];
miHoja.getRange("C2:D2").setValues(val);
}
Al aplicar en nuestro código la función reductora nos facilitará el trabajo de extraer el primer y último valor:
Por ejemplo si vemos el valor de la variable miArray, que es cómo estamos leyendo el rango seleccionado y vemos esto en la consola:
(29) [Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), …]
Si aplicamos la función reductora con la variable valores:
(29) ["", "Cualquiera", "a", "quien", "hayas", "privado", "", "", "de", "todo", …]
Como podéis ver hemos transformado la primera estructura en un array unidimensional, que nos facilitará el trabajo. Para buscar el primer valor utilizamos una función de flecha omitiendo los valores vacíos.
var primerValor = valores.find(valor => valor !== '');
Para obtener el último, simplemente utilizamos la función reverse()
var ultimoValor = valores.reverse().find(valor => valor !== '');
El resultado final es:

Y esto es todo!!. Espero que sea de utilidad!.
¿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