4 agosto, 2021

EXTRAER AÑO, MES Y DÍA DE UNA FECHA EN EXCEL USANDO TYPESCRIPT

Hola a todos!

Llevaba mucho tiempo sin programar en Typescript y este fin de semana he decidido retomarlo de nuevo.

En el ejemplo de hoy voy a trabajar con fechas, y en concreto extraer de una fecha el año, el mes y el día. Este ejercicio lo voy a hacer de dos formas, una trabajando con variables y otra escribiendo las fórmulas en la hoja con typescript y obteniendo así el resultado.

Imaginad que tenemos las siguiente fechas en la primera columna de nuestra hoja de Excel:

Y queremos extraer en las columnas B, C, D el día, mes y año respectivamente. A su vez volveremos a repetir la misma información en las celdas E, F y G, pero utilizando otro método.

Pues bien, para hacerlo utilizaré el siguiente código que he programado en Typescript y que ejecutaré en el editor de código:

async function main(workbook: ExcelScript.Workbook) {
    let MiHoja = workbook.getWorksheet("MIEJEMPLO");
    //cargamos valores de filas y columna
    let MiRangoRow = MiHoja.getUsedRange();
    let MiRangoCol = MiHoja.getUsedRange();
    //Pasamos valores a variables
    let FinRow = MiRangoRow.getRowCount();
    let FinCol = MiRangoCol.getColumnCount();
    //Antes de proceder limpiamos contenido columnas B:D
    MiHoja.getRangeByIndexes(1, 1, FinRow, FinCol).clear(ExcelScript.ClearApplyTo.all);
    // Escribimos encabezados de columna
    MiHoja.getCell(0, 1).setValues([
        ["DIA"]
    ]);
    MiHoja.getCell(0, 2).setValues([
        ["MES"]
    ]);
    MiHoja.getCell(0, 3).setValues([
        ["AÑO"]
    ]);
    MiHoja.getCell(0, 4).setValues([
        ["DIA FÓRMULA"]
    ]);
    MiHoja.getCell(0, 5).setValues([
        ["MES FÓRMULA"]
    ]);
    MiHoja.getCell(0, 6).setValues([
        ["AÑO FÓRMULA"]
    ]);
    // cargamos en variable Info el contenido columna A
    let Info = MiHoja.getRangeByIndexes(0, 0, FinRow, 1).getValues();
    for (let i = 1; i < FinRow; i++) {
        //Pasamos valores almacenados de fecha de Excel a fecha de JavaScript  
        let MiInfo = Info[i];
        let MiFecha = new Date(Math.round((+MiInfo - 25569) * 86400 * 1000));
        // Extraemos día, mes y año
        let DIA = MiFecha.getUTCDate();
        let MES = MiFecha.getUTCMonth() + 1;
        let AÑO = MiFecha.getFullYear();
        // Pasamos resultado a la hoja
        MiHoja.getCell(i, 1).setValues([
            [DIA]
        ])
        MiHoja.getCell(i, 2).setValues([
            [MES]
        ])
        MiHoja.getCell(i, 3).setValues([
            [AÑO]
        ])
        // Ejecutamos funciones (dia, mes y año)
        // pasamos resultado a la hoja
        MiHoja.getCell(i, 4).setFormulas([
            ["=DAY(A" + (i + 1)]
        ]);
        MiHoja.getCell(i, 5).setFormulas([
            ["=MONTH(A" + (i + 1)]
        ]);
        MiHoja.getCell(i, 6).setFormulas([
            ["=YEAR(A" + (i + 1)]
        ]);
    }
}

He comentado todo el código para que se pueda comprender qué hace cada línea de programación.

Pero básicamente estoy utilizando dos métodos, en el primero paso el contenido de la columna A a una variable que almacena la fecha de Excel en un número y que luego pasaré a formato javascript:

let MiInfo = Info[i];
        let MiFecha = new Date(Math.round((+MiInfo - 25569) * 86400 * 1000));

Ojo con el + que indico antes de MiInfo para indicar que se trata de un número y no una string.

A continuación simplemente extraemos cada elemento:

// Extraemos día, mes y año
        let DIA = MiFecha.getUTCDate();
        let MES = MiFecha.getUTCMonth() + 1;
        let AÑO = MiFecha.getFullYear();

y luego lo pasamos a las columnas que hemos definido:

// Pasamos resultado a la hoja
        MiHoja.getCell(i, 1).setValues([
            [DIA]
        ])
        MiHoja.getCell(i, 2).setValues([
            [MES]
        ])
        MiHoja.getCell(i, 3).setValues([
            [AÑO]
        ])

Y este es el resultado:

Otra forma de hacer este ejercicio y que resulta más sencilla es mediante el método .setFormulas():

// Ejecutamos funciones (dia, mes y año)
        // pasamos resultado a la hoja
        MiHoja.getCell(i, 4).setFormulas([
            ["=DAY(A" + (i + 1)]
        ]);
        MiHoja.getCell(i, 5).setFormulas([
            ["=MONTH(A" + (i + 1)]
        ]);
        MiHoja.getCell(i, 6).setFormulas([
            ["=YEAR(A" + (i + 1)]
        ]);

Con esto simplemente pasamos la fórmula a la celda indicada y el resultado se crea automáticamente al ejecutarse la fórmula:

Creo es útil exponer las dos formas de hacerlo y que el lector, según sus necesidades utilice una u otra técnica.

Y esto es todo, espero que os haya resultado interesante.

Nota: Typescript actualmente está disponible en versiones de Excel Online pero cuyas licencias sean Enterprise E3 y E5.

¿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