20 abril, 2024

OBTENER EL PRIMER Y ULTIMO VALOR EN UN RANGO CON CELDAS VACIAS CON TYPESCRIPT

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.

Donate Button with Credit Cards

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

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

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