我的功能包括为文档添加菜单和烤面包。我已经验证了触发器(onOpen)也已设置好。它仅在用户进入“工具”,“脚本管理器”,“运行”时才有效。我们有太多的用户,背景太多,以至于不知道如何做到这一点。为什么不工作? (使用Chrome)
function onOpen()
{
var menus = [{name: "Advance in Workflow", functionName:"sendEmail"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Auto Advance FG Workflow", menus);
//sheet.toast(Notify/Remind users);
sheet.toast("While you are here we kindly ask that you do not add, modify or remove any columns.","Welcome - " + username,8);
}
谢谢,
答案 0 :(得分:30)
我遇到了同样的问题。
我意识到,有时Google会创建某种脚本缓存(我习惯使用“测试”脚本,而且我通常会改变它的内容,有时,脚本会像我没有那样运行)。
所以,我所做的解决了onOpen()无效的问题是改变了函数名称并手动调整了触发器。
转到“资源 - >当前脚本的触发器......”
选择要在打开时运行的功能
这就像一个魅力!
然后
答案 1 :(得分:9)
这是一篇旧帖子,但我刚遇到这个问题,并找出为什么它在我的情况下无法正常工作:
我在脚本文件的顶部有一个变量,它需要一些授权并阻止脚本正确运行。我看到OP称为var username = Session.getActiveUser().getUsername();
(需要授权,可能是原因)。
例如: 这段代码不起作用:
function onOpen(){
SpreadsheetApp.getUi()
.createMenu("Exportation")
.addItem("Lancer l'exportation", "exportationMenu")
.addToUi();
}
var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");
但是这个会起作用:
function onOpen(){
SpreadsheetApp.getUi()
.createMenu("Exportation")
.addItem("Lancer l'exportation", "exportationMenu")
.addToUi();
}
function whatever(){
var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");
...}
答案 2 :(得分:2)
答案 3 :(得分:0)
看起来问题可能是“工作表”未定义,这就是吐司失败的原因。
答案 4 :(得分:0)
在我的情况下,onOpen无法正常工作,因为我在函数外部有一个变量,它使用SpreadsheetApp.openById()
而不是SpreadsheetApp.getActiveSpreadsheet()
打开工作表。我猜onOpen无法与openById()
一起使用,即使您要打开的工作表已绑定到脚本。 onOpen()
不能在函数外部使用此类变量:
var sheet = SpreadsheetApp.openById("1b_PQD...").getSheetByName("demos")
如果脚本绑定到工作表,则可以使用getActiveSpreadsheet()
函数解决此问题。否则,您可以通过将openById()
调用放入函数中来解决此问题。