Google电子表格脚本:ELSE语句覆盖IF语句

时间:2014-01-29 19:14:03

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

我已经整理了一个Google电子表格脚本,该脚本会更改输入国家/地区代码的行的特定国家/地区单元格的背景颜色。我的ELSE语句将BG颜色返回到白色,因此如果一个单元格没有国家代码,它的BG仍然是白色。

我正在使用toString()。match,所以我可以在一个单元格中包含输入,例如:“AU,BEfr,BEnl”,并单独突出显示所有单元格。

在我开始添加更多行之前,它的工作时间很长。也许我偶然删掉了一些东西?

正确的国家/地区单元格突出显示1秒钟,然后立即返回白色背景。

我在这里缺少什么?

非常感谢!

function onEdit() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var s = ss.getSheetByName('R186');
   var values1Rule1 = s.getRange('Locales').getValues();
   var color1 = '#ADD8E6';

   for (var row in values1Rule1) {
      for (var col in values1Rule1[row]) {
         if(values1Rule1[row][col].toString().match("AR") == "AR")
            s.getRange(s.getRange('AR').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         if(values1Rule1[row][col].toString().match("AU") == "AU") 
            s.getRange(s.getRange('AU').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         if(values1Rule1[row][col].toString().match("BEfr") == "BEfr") 
            s.getRange(s.getRange('BEfr').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         if(values1Rule1[row][col].toString().match("BEnl") == "BEnl") 
            s.getRange(s.getRange('BEnl').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         if(values1Rule1[row][col].toString().match("BR") == "BR")
            s.getRange(s.getRange('BR').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         if(values1Rule1[row][col].toString().match("CAen") == "CAen")
            s.getRange(s.getRange('CAen').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);

         else 
            s.getRange(s.getRange('I3:BO').offset(row,0,1,200).getA1Notation()).setBackgroundColor('white').setFontColor('black'); 
      }
   }
};

1 个答案:

答案 0 :(得分:0)

发生的事情是你有很多将单独评估的if语句,然后是一个将被评估的最终if-else语句。只要输入不是“CAen”,您似乎就会将背景重置为白色。

将您的代码更改为

         if(values1Rule1[row][col].toString().match("AR") == "AR")
            s.getRange(s.getRange('AR').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         else if(values1Rule1[row][col].toString().match("AU") == "AU") 
            s.getRange(s.getRange('AU').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         else if(values1Rule1[row][col].toString().match("BEfr") == "BEfr") 
            s.getRange(s.getRange('BEfr').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         else if(values1Rule1[row][col].toString().match("BEnl") == "BEnl") 
            s.getRange(s.getRange('BEnl').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         else if(values1Rule1[row][col].toString().match("BR") == "BR")
            s.getRange(s.getRange('BR').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         else if(values1Rule1[row][col].toString().match("CAen") == "CAen")
            s.getRange(s.getRange('CAen').offset(row,col,1,1).getA1Notation()).setBackgroundColor(color1);
         else 
            s.getRange(s.getRange('I3:BO').offset(row,0,1,200).getA1Notation()).setBackgroundColor('white').setFontColor('black'); 
      }

目前的代码写得很差。您可以简单地将toString()结果转换为临时变量并进行比较(不知道为什么需要match函数而不是==运算符)。此外,您可以看到将突出显示放入其自身的函数中,该函数采用字符串参数和颜色。