我添加了一些菜单并在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");
}
答案 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中没有具体提到这一点,但似乎这是问题所在。您可能需要在脚本中对此触发器进行硬编码,或者可能需要通过另一个菜单项创建它。