Google Sheets Workspace Add-On Hello World菜单未显示问题求助
我正尝试为Google Sheets开发Google Workspace Add-On的Hello World版本,实现带侧边栏的菜单功能。预期打开新Google表格时,「扩展程序(Extensions)>MyApp>Start」菜单会出现,点击Start后右侧将弹出显示“Hello World”的侧边栏。但实际打开表格时,扩展程序菜单中并无MyApp选项,仿佛测试部署从未加载。
已按照官方文档完成项目创建、Cloud项目关联、测试部署安装等步骤,相关代码如下:
现有代码
Common.gs(原Code.gs重命名后)
const ss = SpreadsheetApp.getActiveSpreadsheet(); function onOpen( e ) { ui.createAddonMenu() .addItem( 'Start', 'showSidebar', ) .addToUi(); const menuItems = []; menuItems.push({ name: 'Start' , functionName: 'showSidebar' }); ss.addMenu( 'MyApp', menuItems, ); } function showSidebar() { // code TBD // right now, I'm just trying to get the menu to appear }
Sidebar.html
<html> <body> <div>Hello World</div> </body> </html>
appsscript.json
{ "timeZone":"America/Los_Angeles", "dependencies":{}, "exceptionLogging":"STACKDRIVER", "runtimeVersion":"V8", "addOns":{ "calendar":{ "createSettingsUrlFunction":"getConferenceSettingsPageUrl", "conferenceSolution":[{ "id":"my-video-conf", "logoUrl":"https://lh3.googleusercontent.com/...", "name":"My Video Conference", "onCreateFunction":"onCreateMyVideoConference" }, { "id":"my-streamed-conf", "logoUrl":"https://lh3.googleusercontent.com/...", "name":"My Streamed Conference", "onCreateFunction":"onCreateMyStreamedConference" } ], "currentEventAccess":"READ_WRITE", "eventOpenTrigger":{ "runFunction":"onCalendarEventOpen" }, "eventUpdateTrigger":{ "runFunction":"onCalendarEventUpdate" }, "eventAttachmentTrigger":{ "label":"My Event Attachment", "runFunction":"onCalendarEventAddAttachment" }, "homepageTrigger":{ "runFunction":"onCalendarHomePageOpen", "enabled":true } }, "common":{ "homepageTrigger":{ "runFunction":"onDefaultHomePageOpen", "enabled":true }, "layoutProperties":{ "primaryColor":"#ff392b", "secondaryColor":"#d68617" }, "logoUrl":"https://ssl.gstatic.com/docs/script/images/logo/script-64.png", "name":"Demo Google Workspace Add-on", "openLinkUrlPrefixes":["https://mail.google.com/", "https://script.google.com/a/google.com/d/", "https://drive.google.com/a/google.com/file/d/", "https://en.wikipedia.org/wiki/", "https://www.example.com/" ], "universalActions":[{ "label":"Open settings", "runFunction":"getSettingsCard" }, { "label":"Open Help URL", "openLink":"https://www.example.com/help" } ], "useLocaleFromApp":true }, "drive":{ "homepageTrigger":{ "runFunction":"onDriveHomePageOpen", "enabled":true }, "onItemsSelectedTrigger":{ "runFunction":"onDriveItemsSelected" } }, "gmail":{ "composeTrigger":{ "selectActions":[{ "text":"Add images to email", "runFunction":"getInsertImageComposeCards" } ], "draftAccess":"METADATA" }, "contextualTriggers":[{ "unconditional":{}, "onTriggerFunction":"onGmailMessageOpen" } ] }, "docs":{ "homepageTrigger":{ "runFunction":"onEditorsHomepage" }, "onFileScopeGrantedTrigger":{ "runFunction":"onFileScopeGrantedEditors" } }, "sheets":{ "homepageTrigger":{ "runFunction":"onOpen" }, "onFileScopeGrantedTrigger":{ "runFunction":"onFileScopeGrantedEditors" } }, "slides":{ "homepageTrigger":{ "runFunction":"onEditorsHomepage" }, "onFileScopeGrantedTrigger":{ "runFunction":"onFileScopeGrantedEditors" } } } }
1. 代码逻辑错误
未定义ui变量
onOpen函数中直接使用ui.createAddonMenu(),但ui未声明,会导致脚本执行失败,菜单无法添加。需补充定义:
function onOpen(e) { const ui = SpreadsheetApp.getUi(); // 新增这行 ui.createAddonMenu() .addItem('Start', 'showSidebar') .addToUi(); }
混淆普通脚本菜单与Add-On菜单
同时使用createAddonMenu(Add-On专用菜单,显示在「扩展程序」下)和ss.addMenu(普通脚本菜单,显示在顶部主菜单)会导致逻辑冲突,且不符合Add-On规范。删除ss.addMenu相关代码,仅保留createAddonMenu的逻辑——Workspace Add-On的菜单必须通过该方法创建,才会出现在「扩展程序」菜单中。
2. 清单文件(appsscript.json)配置问题
清理无关服务配置
当前清单包含Calendar、Gmail、Drive等多个非目标服务的配置,会导致触发逻辑混乱甚至加载失败。删除addOns下除common和sheets之外的所有节点,简化后的配置如下:
"addOns":{ "common":{ "name":"MyApp", // 改为你预期的Add-On名称,对应「扩展程序>MyApp」 "logoUrl":"https://ssl.gstatic.com/docs/script/images/logo/script-64.png", "layoutProperties":{ "primaryColor":"#ff392b", "secondaryColor":"#d68617" }, "useLocaleFromApp":true }, "sheets":{ "onFileOpenTrigger":{ // 配置表格打开时触发的函数 "runFunction":"onOpen" } } }
- 修改
common.name为MyApp,确保扩展程序菜单中显示正确的Add-On名称; - 将
sheets下的homepageTrigger改为onFileOpenTrigger,确保打开表格时触发onOpen生成菜单。
移除未实现的函数引用
原清单中包含大量未实现的函数(如getConferenceSettingsPageUrl、onCalendarEventOpen等),会导致Add-On加载报错,必须删除相关配置。
3. 文件与部署问题
脚本文件后缀错误
Apps Script仅识别.gs后缀的脚本文件,若你的代码文件是.js后缀会被忽略,需确保所有脚本文件后缀为.gs。
测试部署后需刷新表格
安装测试部署后,必须刷新当前表格页面或关闭后重新打开,否则浏览器缓存会导致新部署的Add-On无法加载。
确认授权完整性
运行onOpen函数时需完成完整授权,若授权过程中跳过权限,会导致Add-On无法正常加载。可在Apps Script编辑器中重新运行onOpen,按提示完成所有授权步骤。
4. 完善侧边栏代码
补全showSidebar函数,确保点击Start能弹出侧边栏:
function showSidebar() { const html = HtmlService.createHtmlOutputFromFile('Sidebar') .setTitle('Hello World Sidebar'); SpreadsheetApp.getUi().showSidebar(html); }
内容的提问来源于stack exchange,提问作者Let Me Tink About It

