Categoría: Programación

  • 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);
        }
    
    })();