2

我添加了一些菜单并在 onOpen() 中启用了自定义可安装的 onEdit 触发器,如下所示。所有菜单均按预期设置,但未设置可自定义安装的 onEdit 触发器。似乎它没有执行那些删除和创建触发器的行。这里发生了什么?解决方案?

function onOpen() {

  var ass = SpreadsheetApp.getActiveSpreadsheet();

  ass.addMenu("TriggerOn", [null, {name: "Disable OnEditTrigger", functionName: "disableOnEditTrigger"}]);
  ass.addMenu("AlertOn", [null, {name: "Alert Off", functionName: "alertOff"}]);
  ass.addMenu("EmailBodyHtml", [null, {name: "TextBody", functionName: "textbody"}]);
  ass.addMenu("Setup", [null, {name: "MasterTemplate", functionName: "setMasterTemplate"}]);

  //delete all previous triggers
  var allTriggers = ScriptApp.getScriptTriggers();
  // Loop over all triggers
  for(var i=0; i < allTriggers.length; i++)
      ScriptApp.deleteTrigger(allTriggers[i]);

  // Create onEdit trigger using the Spreadsheet
  var onEditTrigger = ScriptApp.newTrigger("myOnEdit")
      .forSpreadsheet(ass)
      .onEdit()
      .create();

  ScriptProperties.setProperty("alert", "1");
  ScriptProperties.setProperty("emailbody", "htmlbody");

}
4

2 回答 2

1

为了证实其他响应,我建议您阅读有关触发器的文档,其中解释了简单触发器(如 onEdit 和 onOpen)具有一组有限的可能操作,因为它们在未经用户授权的情况下运行......添加一个触发器(尽管我从未在这样的触发器中尝试过)超出其可能的操作,因为它需要被授权。如果您想确定,请手动运行它并查看脚本是否要求授权(或者可能已经完成,因此请尝试使用另一个用户帐户)。

您可以创建一个可安装的 onOpen 触发器,该触发器将提示用户授权相关服务,在这种情况下,您可以将其命名为不同的名称以避免混淆(尽管在这种情况下名称并不重要)

希望它足够清楚。

于 2012-11-20T14:38:08.417 回答
0

通过检查代码周围的 try-catch(并转储到 Browser.MsgBox),您似乎遇到了 Apps 脚本施加的安全限制。-似乎"You do not have permission to call getScriptTriggers"存在类似的问题newTrigger,或者基本上存在任何问题。此处ScriptApp的限制中没有特别提到这一点,但似乎这就是问题所在。您可能需要在脚本中对该触发器进行硬编码,或者可能需要通过另一个菜单项来创建它。

于 2012-11-20T14:00:16.000 回答