0

真的觉得我在电子表格对象脚本中遗漏了一些东西。

我正在尝试自动向 onEdit 的协作者发送电子邮件。在测试中明确运行脚本时,我成功发送了电子邮件,但 onEdit 事件似乎从未被触发(甚至没有看到日志消息)。脚本看起来很简单。

function onEdit(e) {
  var sheet = e.source;
  var viewers = sheet.getViewers();
  var ct = viewers.length;
  var recipients = [];
  for(var i=0;i<ct;i++){
    recipients.push(viewers[i].getEmail());
  };
  var subject = 'Update to '+sheet.getName();
  var body = sheet.getName() + ' has been updated.  Visit ' + sheet.getUrl() + ' to view the changes ' + e.range;

  Logger.log('Running onedit');

  MailApp.sendEmail(recipients, subject, body);
};
4

1 回答 1

6

简单的 onEdit 函数具有非常有限的一组可能的操作,因为它在没有潜在用户授权的情况下运行。您必须创建另一个函数并在此函数上设置特定触发器。(可安装触发器)

以这篇文章为例。它显示了简单的 onEdit 和可安装的编辑(用于电子邮件发送)的示例,这在此处的文档中进行了解释。

编辑:这是你的代码工作:

function sendAlert() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation()
  var viewers = ss.getViewers();
  var ct = viewers.length;
  var recipients = [];
  for(var i=0;i<ct;i++){
    recipients.push(viewers[i].getEmail());
  };
  var subject = 'Update to '+sheet.getName();
  var body = sheet.getName() + ' has been updated.  Visit ' + ss.getUrl() + ' to view the changes on cell ' + cell;
  MailApp.sendEmail(recipients, subject, body);
};
于 2012-11-05T18:04:20.597 回答