2012-09-10 26 views
1

我對Google腳本很陌生,所以如果已經回答了這個問題,請致歉。谷歌腳本可以在多張紙上工作

我有一個包含多個工作表的電子表格,其中有許多工作表上有一個狀態欄。

使用代碼我已經找到了,我可以設置整個行的顏色,取決於狀態欄的單元格中的值。

我遇到的問題是我只能得到代碼在單張紙上工作。

以下代碼(由ScampMichael完成)完全按照我希望根據Status列中的值更新整行的方式工作,但我無法在同一工作簿中使用多張工作表(具有不同的名稱)。

我已經嘗試了代碼作爲單獨的腳本與編輯的工作表名稱和列號,以便每個引用單個工作表,但仍然只有1張更新。

請有人建議我如何編輯此代碼或如何複製它,以便跨多張工作表?

function onEdit(e) { 

    var statusCol = 2; // replace with the column index of Status column A=1,B=2,etc 

    var sheetName = "Services"; // replace with actual name of sheet containing Status 

    var cell = e.source.getActiveCell(); 
    var sheet = cell.getSheet(); 
    if(cell.getColumnIndex() != statusCol || sheet.getName() != sheetName) return; 

    var row = cell.getRowIndex(); 
    var status = cell.getValue(); 

    // change colors to meet your needs 
    var color; 
    switch(status) { 
    case "Down": 
     color = "red"; 
     break; 
    case "": 
     color = "White"; 
     break; 
    case "Up": 
     color = "green"; 
     break; 
    } 
    sheet.getRange(row + ":" + row).setBackgroundColor(color); 
} 

謝謝。

回答

1

電子表格只能有一個onEdit()函數。所以,對任何工作表的編輯都必須在這個相同的函數中處理。

其中一種方法不是硬編碼statusCol的值,而是在運行時得到它。 許多可採用的方法中,我會給出兩個在這裏

的更簡單的方法

var statusCols = { 'Sheet1' : 1, 
        'Sheet2' : 2, 
        'Sheet3' : 7 //etc. 
       }; 


function onEdit(e){ 
    var cell = e.source.getActiveCell(); 
    var sheet = cell.getSheet(); 

    var sheetName = sheet.getName(); 
    var statusCol = statusCols[sheetName]; 

    /* Whatever code you already have */ 
} 

第二種方法是更通用

function onEdit(e){ 
    var cell = e.source.getActiveCell(); 
    var sheet = cell.getSheet(); 
    var headers= sheet.getDataRange().getValues()[0]; //Assuming headers on the first row only 
    var statusCol = headers.indexOf('Status') + 1 ; // Replace Status by the actual column header 
    /* Your existing code here */ 
} 
+0

謝謝 - 使用第二種方法我現在有工作代碼 – user1661272

+0

如果是這樣,你能接受所提供的答案 – Srik

0

@Srik - 謝謝你。

使用第二種方法我現在有下面的代碼這是工作在多個選項卡:

function onEdit(e){ 
    var cell = e.source.getActiveCell(); 
    var sheet = cell.getSheet(); 
    var headers= sheet.getDataRange().getValues()[0]; //Assuming headers on the first row only 
    var statusCol = headers.indexOf('Status') + 1 ; // Replace Status by the actual column header 

    var row = cell.getRowIndex(); 
    var status = cell.getValue(); 

    // change colors to meet your needs 
    var color; 
    switch(status) { 
    case "Down": 
     color = "RED"; 
     break; 
    case "Up": 
     color = "LIME"; 
     break; 
    case "": 
     color = "WHITE"; 
     break; 
    } 
    sheet.getRange(row + ":" + row).setBackgroundColor(color); 
} 
相關問題