自定义菜单onOpen不显示

时间:2015-01-16 21:02:32

标签: google-apps-script google-sheets google-calendar-api

此代码段在打开工作表时会按预期创建自定义菜单:

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();
}

但我想了解为什么分配变量不起作用。

2 个答案:

答案 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