2015-09-25 164 views
0

我想創建一些基本的條件格式規則而不是條件格式編輯器中的腳本,因爲當添加或刪除新行時,它會打破已經設置的規則。例如,刪除一行時,條件可能是範圍A:C,但會添加「A1:C5,A6:C898」。這會導致一些行被規則忽略,所以我希望腳本能夠解決這個問題。簡單的條件格式在Google表格腳本編輯器

所以我想簡單地改變單元格背景爲綠色,如果單元格文本完全是「Y」。如果文本正好是「N」,我想將其更改爲紅色。我有其他規則要使用,但我在此基礎上遇到了問題。

我有什麼至今在我的腳本:

function onEdit(e) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("PRECLOSING"); 
    var range = sheet.getRange("E:E,I:J,M:M,P:P,S:V,AB:AC,AF:AF"); 
    range.activate(); 

    var values = rangeY.getValues(); 

    //for each row that data is present 
    for(var i = 0; i < values.length; i++) { 
    var cell = sheet.getRange(i + 1, 2); 

     if (values == "X") 
     { 
      cell.setBackground('black'); 
      return; 
     } else { 
      cell.setBackground('white'); 
     } 
    } 
} 

回答

1

我做了一些修改你的代碼。 函數getRange我不認爲它可以接受這種方式的範圍,而是我認爲它可以只是繼續範圍(例如A1:E10)

爲此,我創建了一個數組與範圍需要,然後我循環他們。

函數「getValues」返回一個二維數組,因此您將需要第二個循環來獲取單元格中的實際值。

然後,因爲您已經有範圍,您需要將該單元格放入該範圍內,而不是新的完整範圍。

function onEdit(e) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("PRECLOSING");; 
    var columns = ['E:E','I:J','M:M','P:P','S:V','AB:AC','AF:AF']; 

    for(var col in columns){ //loop to iterate the desired ranges 

    var range = sheet.getRange(columns[col]); 
    range.activate(); 

    var values = range.getValues(); 

    //for each row that data is present 
    for(var i = 0; i < values.length; i++) { //loop to iterate the rows 
     for(var j = 0; j< values[i].length ; j++){ //loop to iterate the columns 
     var cell = range.getCell(i+1, j+1);  
     if (values[i][j] == "X") 
     { 
      cell.setBackground('black'); 
     }    
     } 
    } 
    } 
} 

希望這會有所幫助。

+0

這似乎工作,但它「控制」工作表。我的意思是,當我將X放在E列中時,工作表將突出顯示列出的所有列,並通過它,從左向右滾動屏幕。我有大約50列和大約200行。看起來像它在正確的軌道上。 – Chris

+0

刪除該行:range.activate(); – Gerardo

+0

這太好了。現在我需要弄清楚如何在這些列和其他列中有多個規則。例如,我想過爲不同的顏色製作一個YES範圍,一個NO範圍,N/A範圍,日期範圍等等。 – Chris

相關問題