【问题标题】:Empty object returned from ScriptApp.newTrigger wihin Google AppScript从 Google AppScript 中的 ScriptApp.newTrigger 返回的空对象
【发布时间】:2020-03-17 00:06:29
【问题描述】:

我正在尝试在提交 AppScript 文档中指定的 Google 表单时创建新触发器:

ScriptApp.newTrigger

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...in or in 循环它们
  • 您的问题解决了吗?如果是这样,请将其发布为答案并将其标记为正确,以便更多人可以从中受益。见stackoverflow.blog/2009/01/06/accept-your-own-answers

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


【解决方案1】:

感谢@TheMaster 的建议。由于 SpreadsheetApp.getActiveSpreadsheet() 是在表单的上下文而不是电子表格的上下文中触发的,因此它返回 null。

通过将其更改为 FormApp.getActiveForm().getDestinationId(),我能够为链接的电子表格检索正确的文档 ID。

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 2022-07-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多