Como dice el título, tengo un formato condicional que estoy configurando a través de App Script. Mi problema es que el resaltado no funciona hasta que entro en la interfaz de usuario y lo actualizo manualmente (por ejemplo, cambiando el color o eliminando y volviendo a agregar un carácter en la definición de la regla). También intenté agregar una regla general para que todo se volviera negro, y... todo se vuelve negro, donde los valores que coinciden con mi regla no se resaltan hasta que me equivoco como dije anteriormente en la interfaz de usuario.
Aquí está mi código:
function highlightExistingFarms(sheet){ var rules = []; var range = sheet.getRange("G:G") strRule = "=VLOOKUP(G:G,INDIRECT(\"'1862'!B:B\"),1,FALSE)"; sheet.clearConditionalFormatRules(); var rule = SpreadsheetApp.newConditionalFormatRule() .whenTextContains(strRule) .setBackground("#b3cfb0") .setRanges([range]) .build(); var ruleForceRefresh = SpreadsheetApp.newConditionalFormatRule() .whenCellNotEmpty() .setBackground("#000000") .setRanges([range]) .build(); var rules = sheet.getConditionalFormatRules(); rules.push(rule); //rules.push(ruleForceRefresh); sheet.setConditionalFormatRules(rules); rules = sheet.getConditionalFormatRules(); sheet.setConditionalFormatRules(rules); SpreadsheetApp.flush(); }Las reglas de formato condicional se aplicarán hasta que se realice un recálculo de hoja de cálculo del rango de formato condicional, por otro lado, cuando se usa una fórmula personalizada para la regla de formato condicional, en lugar de whenTextContains usa whenFormulaSatisfied .
Prueba esto:
function highlightExistingFarms(sheet){ var rules = []; var range = sheet.getRange("G:G") strRule = "=VLOOKUP(G:G,INDIRECT(\"'1862'!B:B\"),1,FALSE)"; sheet.clearConditionalFormatRules(); var rule = SpreadsheetApp.newConditionalFormatRule() .whenFormulaSatisfied(strRule) .setBackground("#b3cfb0") .setRanges([range]) .build(); rules.push(rule); sheet.setConditionalFormatRules(rules); /** Force a recalculation */ const g1 = sheet.getRange('G1'); const g1Value = g1.getValue(); g1.clearContent(); SpreadsheetApp.flush(); g1.setValue(g1Value); }