【发布时间】:2020-03-17 00:06:29
【问题描述】:
我正在尝试在提交 AppScript 文档中指定的 Google 表单时创建新触发器:
function onFormSubmit() {
const triggerName = 'myNewTrigger';
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const trigger = ScriptApp.newTrigger(triggerName);
console.info(trigger);
trigger.forSpreadsheet(sheet).onFormSubmit().create();
}
function myNewTrigger(e) {
// perform some task
}
调用“ScriptApp.newTrigger”时,我希望返回一个 TriggerBuilder 实例,其中包括方法“forSpreadsheet”。
取而代之的是,一个空对象(即绝对没有属性或方法)在其位置返回,但仍被报告为 Google Stackdriver 日志记录中的 ScriptApp.TriggerBuilder 实例。
Exception: Unexpected error while getting the method or property forSpreadsheet on object ScriptApp.TriggerBuilder
我在这里遗漏了一些基本的东西吗?
编辑:感谢@TheMaster 的建议。由于SpreadsheetApp.getActiveSpreadsheet() 正在返回null,因为它是在表单而不是电子表格的上下文中触发的。
通过将其更改为 FormApp.getActiveForm().getDestinationId(),我能够检索到链接电子表格的正确文档 ID。
【问题讨论】:
-
Instead, an empty object。如果您是console.info()ing,那将显示为一个空对象。但它是一个具有 TriggerBuilder 的所有属性的对象。尝试改用电子表格 ID。 -
@TheMaster 感谢您的建议。您的解决方案不仅有效,而且我相信我现在也明白了为什么。但有一件事,为什么将 TriggerBuilder 记录到控制台会导致一个空对象?这与 AppScript 如何实现这个对象有关吗?
-
因为 TriggerBuilder 是一个对象。但它的
toString()可能会被覆盖。您可以尝试使用for...inorin循环它们 -
您的问题解决了吗?如果是这样,请将其发布为答案并将其标记为正确,以便更多人可以从中受益。见stackoverflow.blog/2009/01/06/accept-your-own-answers
标签: google-apps-script triggers google-forms