【发布时间】: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