Google Sheet - 条件格式脚本不适用

时间:2021-06-30 13:07:46

标签: google-apps-script google-sheets spreadsheet

我尝试使用脚本创建条件格式(因为当有人复制和粘贴单元格时,该单元格的规则也被粘贴并且规则很快变成了wtf)

enter image description here

这是六个规则的列表,问题是如果我手动创建它们,它们都可以正常工作。

正如您在下一张图片中看到的,如果我使用脚本,则只有第 6 条规则有效,我不知道为什么只有第 6 条规则而不是其他规则。

enter image description here

对于第 1 条到第 5 条规则,我必须对规则范围进行修改,例如,对于第一条规则,从“A:A1000”到“A:A100”,等待工作表计算(规则现在工作) 然后再次将范围修改为“A:A1000”以将其应用于所有范围。

enter image description here

我在网络上到处搜索,但没有发现有关此错误的任何信息,我是唯一一个 :O 吗?!

这是我的脚本示例:

  function FormatSheet() {
 
  var sheet = SpreadsheetApp.getActive().getSheetByName("Test");
var rangea  = sheet.getRange("A:A")
var rangeb  = sheet.getRange("B:B")
var rangec  = sheet.getRange("C:C")
var ranged  = sheet.getRange("D:D")
var rangee  = sheet.getRange("E:E")
var rangef  = sheet.getRange("F:F")
var rangeg  = sheet.getRange("G:G")
var rangeh  = sheet.getRange("H:H")
var rangei  = sheet.getRange("I:I")
var rangej  = sheet.getRange("J:J")
var rangek  = sheet.getRange("K:K")
var rangel  = sheet.getRange("L:L")
var rangem  = sheet.getRange("M:M")
var rangen  = sheet.getRange("N:N")
var rangeo  = sheet.getRange("O:O")
var rangep  = sheet.getRange("P:P")
var rangeq  = sheet.getRange("Q:Q")
var ranger  = sheet.getRange("R:R")
var ranges  = sheet.getRange("S:S")
var ranget  = sheet.getRange("T:T")
var rangeu  = sheet.getRange("U:U")
var rangev  = sheet.getRange("V:V")
var rangew  = sheet.getRange("W:W")
var rangex  = sheet.getRange("X:X")
var rangey  = sheet.getRange("Y:Y")
var rangez  = sheet.getRange("Z:Z")
  //var range3 = sheet.getRange("A1:T1");
  
  sheet.clearConditionalFormatRules();

  
  var rule2 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied('=ET(REGEXMATCH($M1;"ABC*");NBCAR($M1)=8)=VRAI')
    .setBackground("#c9daf8")
    .setRanges([rangea,rangeb])
    .build();
  var rules2 = sheet.getConditionalFormatRules();
  rules2.push(rule2);
  sheet.setConditionalFormatRules(rules2);

  
    var rule22 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied('=ET(REGEXMATCH($M1;"ABC*");NBCAR($M1)=8)=VRAI')
    .setBackground("#c9daf8")
    .setRanges([rangec])
    .build();
  var rules22 = sheet.getConditionalFormatRules();
  rules22.push(rule22);
  sheet.setConditionalFormatRules(rules22);

    var rule11 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied('=ET(B1="";C1="")=VRAI')
    .setBackground("#b7b7b7")
    .setRanges([rangea,rangeb,rangec,ranged,rangee,rangef,rangeg,rangeh,rangei,rangej,rangek,rangel,rangem,rangen,rangeo,rangep,rangeq])
    .build();
  var rules11 = sheet.getConditionalFormatRules();
  rules11.push(rule11);
  sheet.setConditionalFormatRules(rules11);

      var rule3 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied('=R:R=AUJOURDHUI()')
    .setBackground("#ff9900")
    .setRanges([rangea])
    .build();
  var rules3 = sheet.getConditionalFormatRules();
  rules3.push(rule3);
  sheet.setConditionalFormatRules(rules3);

        var rule4 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied('=J1<>""')
    .setBackground("#4b88e4")
    .setRanges([rangej,rangek])
    .build();
  var rules4 = sheet.getConditionalFormatRules();
  rules4.push(rule4);
  sheet.setConditionalFormatRules(rules4);
  
}  

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

说明:

条件格式在代码执行时没有正确应用,因为公式名称是非英语的,当您手动输入(或更改)自定义公式时,它会将自身转换为英文名称,格式照常进行。

解决方案:

您需要在代码中输入英文公式名称:

=AND(REGEXMATCH($M1;"ABC*");LEN($M1)=8)=TRUE
=AND(B1="";C1="")=TRUE
=R:R=TODAY()

代码执行时的示例输出:

enter image description here