2016-11-30 29 views
0

我想在特定單元格(即文檔)更新時向某人發送通知。具體來說,當一行中的單元格被更新時,它會向在同一行中列出的所有者發送通知。例如B47被更新,它發送一封電子郵件給B3。您是否可以在Google Script中爲多張表單發送通知?

當腳本指向一張工作表時,我已經獲得腳本工作。但是,當我嘗試要求腳本運行多個工作表/選項卡時,出現錯誤'找不到腳本函數:sendNotification'是否可以讓此腳本在同一個Google文檔中的多個工作表/選項卡上工作?更新從不同的來源拉,所以我想繼續使用getSheetbyName而不是getActiveSheet。

任何幫助將不勝感激。這裏是我的代碼,它的立場:

function shellFunction() { 
    var sheets = ['Arabic', 'Portuguese']; 
    for (var s in sheets) { 
    toTrigger(sheets[s]); 
    } 

    function toTrigger(sheetName) { 
    function sendNotification() { 
     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     var sheet = ss.getSheetByName(sheets[s]); 
     var cell = ss.getActiveCell().getA1Notation(); 
     var row = sheet.getActiveRange().getRow(); 
     var cellvalue = ss.getActiveCell().getValue().toString(); 
     var recipients = sheet.getRange('J' + sheet.getActiveCell().getRowIndex()).getValue(); 
     var message = ''; 

     if (cell.indexOf('B') != -1) { 
     message = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() 
     } 
     var subject = 'The ' + sheet.getRange('F' + sheet.getActiveCell().getRowIndex()).getValue() + ' ' + sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' needs your Translation'; 
     var body = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' has been updated. Can you please update ' + sheet.getRange('G' + sheet.getActiveCell().getRowIndex()).getValue() + '? Please remember to update the date column in the Resource Document when the translation is complete:' + ss.getUrl(); 
     MailApp.sendEmail(recipients, subject, body); 
    } 
    } 
} 

回答

1

如果這條線

var sheet = ss.getSheetByName(sheets[s]); 

改爲

var sheet = ss.getSheetByName(sheetName); 

,因爲這是通紙的名字嗎?

編輯

有可能造成問題的一對夫婦的其他項目。我做了這樣的結果編輯:

function shellFunction() { 
    var sheets = ['Arabic', 'Portuguese']; 
    for (var s in sheets) { 
    toTrigger(sheets[s]); 
    } 
} 

    function toTrigger(sheetName) { 
     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     var sheet = ss.getSheetByName(sheetName); 
     var cell = ss.getActiveCell().getA1Notation(); 
     var row = sheet.getActiveRange().getRow(); 
     var cellvalue = ss.getActiveCell().getValue().toString(); 
     var recipients = sheet.getRange('J' + sheet.getActiveCell().getRowIndex()).getValue(); 
     var message = ''; 

     if (cell.indexOf('B') != -1) { 
     message = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() 
     } 
     var subject = 'The ' + sheet.getRange('F' + sheet.getActiveCell().getRowIndex()).getValue() + ' ' + sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' needs your Translation'; 
     var body = sheet.getRange('A' + sheet.getActiveCell().getRowIndex()).getValue() + ' has been updated. Can you please update ' + sheet.getRange('G' + sheet.getActiveCell().getRowIndex()).getValue() + '? Please remember to update the date column in the Resource Document when the translation is complete:' + ss.getUrl(); 
     MailApp.sendEmail(recipients, subject, body); 
    } 

我的第一個改變是不嵌套的功能。爲此,我在toTrigger函數前添加了一個大括號,並刪除了代碼中的最後一個。之後還有另外一個嵌套函數,它實際上組成了toTrigger的所有函數。它被稱爲sendNotifocation,它符合你的錯誤。我通過刪除toTrigger函數聲明後的行和代碼末尾的另一個大括號來刪除該行。

最後,我做了上面的編輯。在我的測試中,它似乎工作正常,除了我註釋掉實際發送電子郵件的電話並且僅在該點之前調試到線路。

+0

我仍然得到'更新腳本函數未找到:sendNotification'。 sendNotification僅在腳本指向一個工作表時才起作用? – Wildsea

+0

在上面的答案中查看編輯 –

+0

謝謝@Karl_S看起來像這樣做了。剩下的一個問題就是我遇到了 - 當我添加新工作表時,我收到'無法發送電子郵件:無收件人'錯誤。有沒有一種方法可以讓腳本運行,如果沒有一張表缺少電子郵件地址? – Wildsea