2016-11-30 32 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