您可以在Google Script中发送多个工作表的发送通知吗?

时间:2016-11-30 22:09:02

标签: google-apps-script

我想在更新特定单元格(即文档)时向某人发送通知。具体来说,当更新一行中的单元格时,它会向同一行中列出的所有者发送通知。例如B47更新,它会向B3发送一封电子邮件。

当它指向一张纸时,我已经让脚本工作了。但是当我尝试让脚本运行多个工作表/标签时,我收到错误'找不到脚本功能: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 个答案:

答案 0 :(得分: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函数声明后面的行和代码末尾的另一个花括号来删除它。

最后,我进行了上述编辑。在我的测试中它似乎工作得很好,除了我注释掉实际发送电子邮件的调用,并且只是在那之前调试到该行。