如何在打开Google Spreadsheet时运行Google Workspace插件中的函数?
Google Workspace插件实现全局打开自动创建菜单的方案
Google Workspace插件和传统编辑器附加组件(原G Suite编辑器插件)的设计定位不同:前者主打跨Workspace应用的卡片式交互,后者专注于编辑器(Sheets/Docs等)的原生功能扩展(比如自定义菜单)。针对你要实现的「安装后打开任意表格自动创建菜单」需求,以下是可行方案:
方案一:使用编辑器附加组件(推荐)
这是最贴合需求的方式,因为编辑器附加组件的onOpen简单触发器天生支持全局生效:
- 保留传统的
onOpen触发器函数:
function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('我的自定义菜单') .addItem('功能1', 'function1') .addItem('功能2', 'function2') .addToUi(); }
- 在
appsscript.json清单文件中配置addOns字段(编辑器附加组件配置),而非仅配置workspace字段:
{ "timeZone": "Asia/Shanghai", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "addOns": { "sheets": { "homepageTrigger": { "runFunction": "showSidebar", "enabled": true }, "onFileOpenTrigger": { "runFunction": "onOpen" } } } }
用户安装插件后,打开任意Google表格时,onOpen会自动触发并创建自定义菜单,同时你也可以保留侧边栏交互,兼容Workspace插件的使用场景。
方案二:纯Workspace插件的近似实现(无全局自动触发)
受限于Workspace插件的设计机制,无法实现完全全局的自动触发,但可以通过以下方式优化:
在用户第一次打开插件侧边栏时,引导其为当前表格创建onOpen可安装触发器,后续打开该表格时会自动加载菜单:
- 编写菜单初始化和触发器设置函数:
function initializeMenu() { const ui = SpreadsheetApp.getUi(); ui.createMenu('我的自定义菜单') .addItem('功能1', 'function1') .addItem('功能2', 'function2') .addToUi(); } function setupTriggerForCurrentSheet() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const existingTriggers = ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() === 'initializeMenu' && t.getEventType() === ScriptApp.EventType.ON_OPEN && t.getTriggerSourceId() === ss.getId() ); if (existingTriggers.length === 0) { ScriptApp.newTrigger('initializeMenu') .forSpreadsheet(ss) .onOpen() .create(); SpreadsheetApp.getUi().alert('已为当前表格配置自动菜单,下次打开时将自动加载!'); } else { SpreadsheetApp.getUi().alert('当前表格已配置自动菜单!'); } }
- 在插件侧边栏中添加按钮,调用
setupTriggerForCurrentSheet函数,引导用户完成当前表格的触发器配置。
内容的提问来源于stack exchange,提问作者marketergeek
相关产品推荐
相关产品推荐

