3 febrero, 2023

FUNCIÓN DE FLECHA PARA TRANSPONER UNA MATRIZ CON TYPESCRIPT

Hola a todos,

Cuando trabajamos con funciones definidas en typescript y queremos devolver el resultado de una matriz derramada a la hoja se Excel y transponerla, lo más sencillo es usar la función transponer que tenemos nativa en nuestro excel online. En este post tenéis un ejemplo de lo que estoy hablando: CUSTOM FUNCTION PARA GENERAR LISTA DE FECHAS DE DÍAS LABORALES ENTRE DOS FECHAS CON TYPESCRIPT

En la imagen de portada de ese post podéis ver cómo se invoca la custom function pero anidada dentro de la función transponer.

Pues bien, existen otras formas de hacer esto pero dentro del código. Una de ellas es utilizando una función de flecha. Siguiendo el ejemplo anterior, tendíamos que incluir esta función en la

 const transponer = array => array[0].map((col, c) => array.map((row, r) => array[r][c]))

y el retorno de la función se invocaría así:

return transponer([resultado]) 

El código sería completo sería este:

/**
 * @customfunction
 * @param {number[][]}
 * @returns {string[][]} 
 */
function fechasEntreLab(inicio, final) {
  //convertimos fecha número
  var ini = new Date(Math.round((inicio - 25569) * 86400 * 1000)).toLocaleDateString("en-US");
  var fin = new Date(Math.round((final - 25569) * 86400 * 1000)).toLocaleDateString("en-US");
  var i = 0;
  do {
    i++;
    //generamos días
    var nIni = new Date(Date.parse(ini) + i * 24 * 60 * 60 * 1000);
    var nFin = new Date(Date.parse(fin) + 1 * 24 * 60 * 60 * 1000);
    //formateamos fecha
    var fechas = ('0' + nIni.getUTCDate()).slice(-2) + '/'
      + ('0' + (nIni.getUTCMonth() + 1)).slice(-2) + '/'
      + nIni.getUTCFullYear();
    //obtenemos el día, en este caso el literal  
    let alfafechas = new Date(nIni.getUTCFullYear() + "/" + (nIni.getUTCMonth() + 1) + "/" + nIni.getUTCDate()).toLocaleString("es-ES", { weekday: "long", });
    //condicionamos a que solo vamos se agrupen días de la semana
    if (alfafechas != 'sábado' && alfafechas != 'domingo') {
      var sCadena = sCadena + "," + fechas;
    }
  }
  while (nIni < nFin);
  var resultado = sCadena.toString().split(",");
  var ncadena = resultado.shift();
   //return [resultado]
  //función de flecha para transponer
 const transponer = array => array[0].map((col, c) => array.map((row, r) => array[r][c]))
  return transponer([resultado]) 
};

De forma que si queremos el resultado en una fila sería como está en post original:

return [resultado]

y si queremos en columna:

return transponer([resultado]) 

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