2012-11-20 39 views
2

我在onOpen()中添加了一些菜单并启用了自定义可安装onEdit触发器,如下所示。所有菜单均按预期设置,但未设置自定义可安装onEdit触发器。它似乎不执行这些行来删除和创建触发器。这里发生了什么?解决方案?Google Apps脚本 - 从模板电子表格复制后未设置可安装的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"); 

} 

回答

1

为了证实其他的反应,我建议你阅读documentation on triggers这里解释了简单的触发器(比如onEdit和onOpen)由于它们没有用户的授权而运行,因此具有有限的一组可能的动作。添加一个触发器(尽管我从来没有在这样的触发器中尝试过),因为它需要被授权。如果您想确定,请手动运行它并查看脚本是否要求授权(或者可能已经完成了它,请尝试使用其他用户帐户)。

您可以创建一个可安装的OnOpen触发,将提示用户授权有关的服务,在这种情况下,您可以采用不同命名,以避免混乱(虽然名字不重要在这种情况下)

希望满月很清楚。

+0

是的。 onOpen是一个简单的触发器。将“创建新的触发器”代码移动到菜单项功能中。 –

0

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

相关问题