ONLYOFFICE – Macro para contar casillas con color de fondo

Aquí os pongo el código de una macro para ONLYOFFICE que cuenta casillas dependiendo de su color de fondo.

Contará las casillas según el color de la columna A a la K y pondrá el resultado en las columnas L, M y N según sean rojas, amarillas o lilas.

(function()
{
    var oWorksheet = Api.GetActiveSheet();
    
    // ==========================================
    // CONFIGURACIÓN DE COLORES (HEXADECIMAL)
    // ==========================================
    var hex_rojo     = "FF0000";
    var hex_amarillo = "FFFF00";
    var hex_lila     = "CCC1DA";

    // Función CORREGIDA a orden RGB (R*65536 + G*256 + B)
    function hexToOnlyOfficeDec(hex) {
        hex = hex.replace("#", "");
        var r = parseInt(hex.substring(0, 2), 16);
        var g = parseInt(hex.substring(2, 4), 16);
        var b = parseInt(hex.substring(4, 6), 16);
        return (r * 65536) + (g * 256) + b;
    }

    var ID_ROJO     = hexToOnlyOfficeDec(hex_rojo).toString();     // Debería dar 16711680
    var ID_AMARILLO = hexToOnlyOfficeDec(hex_amarillo).toString(); // Debería dar 16776960
    var ID_LILA     = hexToOnlyOfficeDec(hex_lila).toString();     // Debería dar 13418970


    // ==========================================
    // CONFIGURACIÓN DE RANGOS
    // ==========================================
    var filaInicio = 2;
    var filaFin = 11;
    var colInicio = 0;  // A
    var colFin = 10;    // K
    
    var colBH = 11; // L
    var colBI = 12; // M
    var colBJ = 13; // N

    for (var f = filaInicio; f <= filaFin; f++) {
        var rojos = 0, amarillos = 0, lilas = 0;

        for (var c = colInicio; c <= colFin; c++) {
            var oRange = oWorksheet.GetRangeByNumber(f - 1, c);
            var oColor = oRange.GetFillColor();
            
            if (oColor) {
                var sColorInfo = JSON.stringify(oColor);
                
                if (sColorInfo.indexOf(ID_ROJO) !== -1) {
                    rojos++;
                } else if (sColorInfo.indexOf(ID_AMARILLO) !== -1) {
                    amarillos++;
                } else if (sColorInfo.indexOf(ID_LILA) !== -1) {
                    lilas++;
                }
            }
        }

        oWorksheet.GetRangeByNumber(f - 1, colBH).SetValue(rojos);
        oWorksheet.GetRangeByNumber(f - 1, colBI).SetValue(amarillos);
        oWorksheet.GetRangeByNumber(f - 1, colBJ).SetValue(lilas);
    }

})();

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *