2014-01-29 138 views
0

我將一個Google Spreadsheet腳本一起入侵,該腳本改變輸入國家代碼的行的特定國家/地區單元格的背景顏色。我的ELSE語句將BG顏色返回到白色,所以如果一個單元格沒有國家代碼,則BG保持白色。谷歌電子表格腳本:ELSE語句覆蓋IF語句

我使用的是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'); 
     } 
    } 
}; 

回答

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函數而不是==運算符)。另外,你可以看到把你的突出顯示放到它自己的函數中,該函數接受一個字符串參數和一個顏色。

+0

感謝您幫助安迪!確實,編輯確實有效,但是如果將所有內容都更改爲'其他',則意味着不止一個國家​​/地區的語言環境輸入(例如「AU,BEfr,BEnl」)不起作用。這是我需要的主要功能。 我從字面上研究StackOverflow和我非常基本的JS知識(如果有的話)一起黑客入侵。 – user3119398

+0

如果您試圖匹配單元格值中的任何字符串,請使用RegEx或一些更復雜的匹配邏輯進行研究。通過這種方式,你也可以有一個更清潔的if-else塊。 – AndyG

+0

太好了。我會搜尋一下。非常感謝! – user3119398