Google Apps脚本 - 从模板电子表格复制后未设置可安装的OnEdit触发器

时间:2012-11-20 10:13:40

标签: google-apps-script

我添加了一些菜单并在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");

}

2 个答案:

答案 0 :(得分:1)

为证实其他回复,我建议您阅读documentation on triggers,其中解释简单触发器(如onEdit和onOpen)具有一组有限的可能操作,因为它们在未经用户授权的情况下运行...添加触发器(虽然我从来没有在这样的触发器中尝试过它)超出了它可能的行动,因为它需要被授权。如果你想确定,请手动运行它,看看脚本是否要求授权(或者可能已经完成了,所以尝试使用其他用户帐户)。

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

希望它足够清楚。

答案 1 :(得分:0)

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