Google Sheets Workspace插件安装后onOpen不执行,自定义菜单未显示
问题描述
按照Google开发者文档构建Sheets编辑器及Workspace插件,操作流程为:部署→测试部署→Workspace插件路径下安装,随后打开新表格(sheet.new),预期等待数秒后,插件自定义菜单会显示在Extensions下拉菜单中。
实际结果:完成安装后打开新表格,Extensions下拉菜单中无自定义菜单,Cloud Logs也未记录该表格的onOpen事件。
插件包含两个发起外部API请求的自定义函数,以及一个HTML设置侧边栏(用于快速查看链接和管理员只读字段)。已确认插件在Enabled、Installed & Enabled authMode的测试部署模式下可正常工作,仅在扩展宿主应用(Sheets)的最后测试步骤出现问题。
已尝试的操作:
- 修改清单文件中
homepageTrigger的runFunction为负责添加菜单的addMenu函数,卸载重装后问题依旧 - 测试了"View document add-ons"方法
匿名化后的appsscript.json清单文件如下:
{ "addOns": { "common": { "name": "My sheets app", "logoUrl": "https://lh3.googleusercontent.com/__PIC_ID__", "layoutProperties": { "primaryColor": "#B8136C" } }, "sheets": { "homepageTrigger": { "runFunction": "onOpen" } } }, "timeZone": "America/New_York", "dependencies": { "enabledAdvancedServices": [ { "userSymbol": "Sheets", "serviceId": "sheets", "version": "v4" } ] }, "exceptionLogging": "STACKDRIVER", "oauthScopes": [ "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile", "openid", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/script.external_request" ], "runtimeVersion": "V8", "urlFetchWhitelist": [ "https://www.mysamplesite.net/" ], "webapp": { "executeAs": "USER_ACCESSING", "access": "ANYONE" } }
排查与解决建议
清单文件问题修正
移除多余的
webapp配置:
Workspace插件不需要Web App相关配置,当前清单中的webapp节点属于冗余内容,可能干扰插件与Sheets的集成逻辑。删除整个webapp字段后,重新部署测试。确认菜单函数的插件模式语法:
插件添加菜单必须使用专用的createAddonMenu()方法,而非普通脚本的createMenu()。无论清单中指定的是onOpen还是addMenu,函数逻辑需符合以下格式:function addMenu(e) { const ui = e.ui; ui.createAddonMenu() .addItem('打开设置侧边栏', 'showSidebar') .addToUi(); }普通脚本的菜单添加方式在插件模式下无法生效,必须依赖事件参数
e传递的UI实例。
部署与安装验证
确认测试部署类型:
重新创建测试部署时,确保选择的目标类型是Workspace插件,而非Web App或其他类型,避免部署配置不匹配。强制清除缓存并重装:
卸载插件后,打开Sheets页面时按Ctrl+Shift+R(Windows)或Cmd+Shift+R(Mac)强制刷新,清除浏览器缓存后再重新安装插件。检查授权状态:
登录Google账号,进入「安全」→「第三方应用访问」页面,确认该插件已获得完整授权,未出现授权被拒绝或部分授权的情况。
日志与调试
查看脚本编辑器日志:
除Cloud Logs外,直接在脚本编辑器中打开「查看」→「日志」,查看插件运行时的实时日志输出,这能更直接地捕获插件触发时的错误或执行情况。添加调试日志:
在菜单添加函数的开头加入调试日志,例如:function addMenu(e) { console.log('菜单函数已触发'); // 后续菜单创建逻辑 }如果日志无输出,说明触发器未被触发;如果有输出但菜单不显示,重点检查菜单创建的语法是否符合插件要求。
内容的提问来源于stack exchange,提问作者GPP

