onChange触发器未按预期工作

时间:2017-01-11 09:23:19

标签: google-apps-script google-sheets triggers

我有一个基于定时触发器自动刷新IMPORTXML功能的Google工作表,并且我正在尝试编写一个脚本,当它检索到具有“帮助”消息类型的行时会自动通过电子邮件发送通知警报。 / p>

我根据我发现的一些例子编译了这个脚本。我已经测试了它,并且可以通过onEdit可安装触发器手动输入数据,但是我的测试(并且基于研究)我需要使用onChange触发器让IMPORTXML触发脚本。

但是,当我将脚本设置为onChange可安装触发器时,脚本似乎不会使用IMPORTXML加载数据自动执行,也不会在工作表上手动输入脚本。

我是否遇到了Good Apps Script的一些限制?这是我第一次使用它(和JavaScript)

function helpAlertEmail(e) 
{
  if (e.range.columnStart !== 5 || e.value !== 'HELP' && e.value !== 'HELP-CANCEL') return;
  var ss = e.source.getActiveSheet()
  var details = ss.getRange(e.range.rowStart, 1, 1,11).getValues()[0];
  var headers = ss.getRange(1, 1, 1, 11).getValues()[0];
  var subject = "SPOT BEACON ALERT:  " + details[2] + " Sent a " + details[4] + " Message at " + details[9];
  var body = "SPOT Beacon " + details[2] + " (" + details[1] + ")  Sent a " + details[4] + " Message at " + details[9] +  "\n\n";
  var email = "xxx@xxx.org";
  var cols = [0, 4, 5, 6, 9, 10];

  for (var i = 0; i < details.length; i++) 
  {
    if (cols.indexOf(i) === -1) continue;
    body += headers[i] + ": " + details[i] + "\n"
  }

  body += "\n\n\n Please do not respond to this email as it is automatically generated by an account that is not checked.";
  MailApp.sendEmail(email, subject, body, {noReply:true});
}

1 个答案:

答案 0 :(得分:2)

根据您对用例的解释,我希望您了解这一点:

1) onEdit - 指定在编辑电子表格时触发的触发器。

2) onChange - 指定在电子表格的内容或结构发生变化时触发的触发器。

这些是Google声明的条件。

现在它没有告诉我们的是:

1)编辑必须是手动

现在你说你也尝试过手动但触发器没有触发。可能的原因是您可能从某处复制了数据,然后将其粘贴到您想要的位置。所以,在这种情况下你不能指望触发器触发。

2)编辑不能是任何形式的自动化(使用电子表格公式或使用任何脚本无法完成)。在这种情况下,触发器也不会触发。

因此,总而言之,您所面临的是不是Google所声明的任何限制的结果。可悲的是,它就是这样。

你需要做的是,想一想你想要达到的目标的另一种方式,就是使用除 onChange onEdit 触发器。