onChange 触发器未按预期工作
onChange Trigger not working as expected
我有一个 google sheet,它有一个基于定时触发器的自动刷新 IMPORTXML 功能,我正在尝试编写一个脚本,当它检索到消息类型为 "HELP" 的行。
我根据我找到的一些例子编译了这个脚本。我已经对其进行了测试,它可以很好地处理带有 onEdit 可安装触发器的手动输入数据,但是根据我的测试(以及基于研究),我需要使用 onChange 触发器来让 IMPORTXML 触发脚本。
但是,当我将脚本设置为 onChange 可安装触发器时,脚本似乎不会自动执行 IMPORTXML 加载数据或由我在 sheet 上手动输入。
我是否遇到了 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) onEdit - 指定将在编辑电子表格时触发的触发器。
2) onChange - 指定当电子表格的内容或结构发生变化时将触发的触发器。
这些是Google规定的条件。
现在它没有告诉我们的是:
1) 必须手动编辑
现在您说您也手动尝试过,但触发器没有触发。一个可能的原因是您可能从某个地方复制了数据,然后将其粘贴到您想要的位置。因此,您不能指望触发器在那种情况下会触发。
2) 编辑不能是任何形式的自动化(不能使用电子表格公式或任何脚本来完成)。在这种情况下,触发器也不会触发。
因此,总而言之,您面临的问题 不是 Google 规定的任何限制 的结果。可悲的是,它就是这样。
你需要做的是,想出另一种方法来实现你想要实现的目标,即使用除 onChange 和 onEdit 触发器。
我有一个 google sheet,它有一个基于定时触发器的自动刷新 IMPORTXML 功能,我正在尝试编写一个脚本,当它检索到消息类型为 "HELP" 的行。
我根据我找到的一些例子编译了这个脚本。我已经对其进行了测试,它可以很好地处理带有 onEdit 可安装触发器的手动输入数据,但是根据我的测试(以及基于研究),我需要使用 onChange 触发器来让 IMPORTXML 触发脚本。
但是,当我将脚本设置为 onChange 可安装触发器时,脚本似乎不会自动执行 IMPORTXML 加载数据或由我在 sheet 上手动输入。
我是否遇到了 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) onEdit - 指定将在编辑电子表格时触发的触发器。
2) onChange - 指定当电子表格的内容或结构发生变化时将触发的触发器。
这些是Google规定的条件。
现在它没有告诉我们的是:
1) 必须手动编辑
现在您说您也手动尝试过,但触发器没有触发。一个可能的原因是您可能从某个地方复制了数据,然后将其粘贴到您想要的位置。因此,您不能指望触发器在那种情况下会触发。
2) 编辑不能是任何形式的自动化(不能使用电子表格公式或任何脚本来完成)。在这种情况下,触发器也不会触发。
因此,总而言之,您面临的问题 不是 Google 规定的任何限制 的结果。可悲的是,它就是这样。
你需要做的是,想出另一种方法来实现你想要实现的目标,即使用除 onChange 和 onEdit 触发器。