【问题标题】:Google Spreadsheet - Custom menu won't load because onOpen won't fireGoogle 电子表格 - 自定义菜单不会加载,因为 onOpen 不会触发
【发布时间】:2013-01-17 03:26:18
【问题描述】:

我正在按照“Defining Spreadsheet Menus”教程中的规定做所有事情。使用 onOpen 事件处理程序修改菜单。

我已经在“脚本库”中公开提供了这个“文本到列”脚本,但我担心当自定义菜单需要很长时间才能弹出时,下载的用户可能会感到困惑。

第一次加载脚本被证明是一种痛苦。很多时候完全错过了 onOpen 触发器。似乎触发器设置不正确,因为手动重置 onOpen 触发器将修复它。

对于个人使用,我认为这是一个小麻烦,但对于共享脚本,它成为一个支持问题。

注意:每次后续加载始终需要大约 7 秒才能出现,这还可以,但远非理想。

这是 onOpen 处理程序:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({ name:"Text to columns", functionName:"textToColumns" });
  menuEntries.push({ name:"Text to columns (custom separator)", functionName:"textToColumnsCustom" });
  menuEntries.push(null);
  menuEntries.push({ name:"Columns to Text", functionName:"columnsToText" });
  menuEntries.push({ name:"Columns to Text (custom separator)", functionName:"columnsToTextCustom" });
  ss.addMenu("Advanced", menuEntries);
}

注意:这是在只有一个用户的新(即空)电子表格上测试的。

【问题讨论】:

  • 如何在 onOpen 中创建包含很少或没有项目的菜单,然后使用 new relative-time triggers 让另一个函数用其他项目更新菜单?
  • 有意思,值得一试。
  • @Mogsdad 我做了一些阅读,这可能会使问题更加复杂,因为一天内可以调用时间触发器的次数是有配额的,这是一个公开共享的脚本。看起来问题初始加载问题是由脚本未能触发 onOpen 引起的。可以通过手动向脚本添加 onOpen 触发器来使其工作。至于后续的加载时间,7 秒似乎是一致的标准。
  • 另一种选择是放弃菜单,而只是将可点击的按钮放在工作表中。见How do you add UI inside cells in a google spreadsheet using app script?。这可能不适合您的特定应用程序,但通常看起来会更快。
  • 将此功能作为菜单项提供是很重要的。该脚本被实现为许多从 Excel 迁移的用户可能依赖的“文本到列”功能的 polyfill。不管怎样,我很感激这些建议。

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


【解决方案1】:

我不确定,但我想用户必须登录,如果没有,我曾经遇到过这个问题,并通过制作两个或多个触发器来解决它,所有触发器都处于打开状态并且功能相同,但是请尝试让互联网速度超过 30KB/s 以确保问题出在代码上,而不是来自您的设备

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多