自定义菜单 onOpen 不显示

Custom menu onOpen does not show

此代码段在打开 sheet 时创建自定义菜单,如预期的那样:

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

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

当您在 GAS 中启动脚本时(在本例中,open 事件触发 onOpen 函数),GAS 加载所有代码,执行主体中的代码(在本例中,var CALNAME= CalendarApp.getDefaultCalendar() ; ), 然后执行 onOpen.

在评估 CalendarApp.getDefaultCalendar() 时退出执行似乎是一个错误,所以 onOpen 永远不会执行。

常见的原因是:出于安全原因,open 事件在"privilegesLESS" 环境中执行onOpen,因此您对onOpen 的功能非常有限。您似乎无法在该环境中执行 CalendarApp.getDefaultCalendar()。

尝试从 onOpen 调用 CALNAME(),您会看到它中断了。

答案是使用可安装的触发器,而不是标准的 onOpen。​​

参见 Installable Triggers Reference 中的 'Managing triggers manually' 位。 感谢Serge insas for the tip in this question