此代码段在打开工作表时会按预期创建自定义菜单:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('First item', 'menuItem1')
.addToUi();
}
function menuItem1() {
SpreadsheetApp.getUi().showModelessDialog(userInterface, title)
.alert('You clicked the first menu item!');
}
添加以下这一行:
var CALNAME= CalendarApp.getDefaultCalendar();
除非我手动运行onOpen()
,否则会阻止显示自定义菜单。我可以使用函数修复它:
function CALNAME() {
return CalendarApp.getDefaultCalendar();
}
但我想了解为什么分配变量不起作用。
答案 0 :(得分:2)
当您在GAS中启动脚本时(在这种情况下,open事件触发onOpen函数),GAS会加载所有代码,执行正文中的代码(在本例中,var CALNAME = CalendarApp.getDefaultCalendar();),以及之后执行onOpen。
在评估CalendarApp.getDefaultCalendar()时退出执行似乎是一个错误,因此onOpen永远不会被执行。
常见的原因是:出于安全原因,打开事件在“privilegesLESS”环境中执行onOpen,因此您对onOpen可以执行的操作非常有限。您似乎无法在该环境中执行CalendarApp.getDefaultCalendar()。
尝试从onOpen调用CALNAME(),你会看到它中断。
答案 1 :(得分:0)
答案是使用可安装的触发器,而不是标准的onOpen。
请参阅'手动管理触发器'位于Installable Triggers Reference。 感谢Serge insas
提示this question