You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets插件从市场安装后无法添加菜单项问题咨询

问题1解答

从现有日志没有任何onInstall()的执行记录,完全可以判定该触发器没有运行。你猜测的场景完全合理:谷歌审核团队的测试环境会保留上一次提交版本的安装记录,第二次审核时不会特意卸载旧版本再重新安装,仅会打开测试文档验证功能。旧版本安装时没有正确的onInstall()逻辑,后续打开文档触发的onOpen()运行在AuthMode.NONE权限模式下,没有权限调用addMenu接口,就会抛出你看到的权限错误。

问题2解答

要模拟应用市场安装场景测试onInstall(),可以用以下两种方法:

  • 把脚本发布为未列出的测试版插件,设置测试人员为你自己的其他谷歌账号,用测试账号登录后在Google Sheets插件市场搜索测试版插件完成安装,此时触发的onInstall()和正式市场安装的运行环境完全一致,测试完成后可以随时撤销测试版发布,不会影响正式提审流程。
  • 不想发布测试版的话,可以在脚本编辑器的执行页面,手动构造onInstall的事件对象参数,手动触发onInstall函数执行,验证函数逻辑是否能正常调用onOpen添加菜单。

问题3解答

你可以按以下步骤修复问题:

  1. 补全onOpen的参数,同时在函数开头加入权限模式判断,兼容不同运行场景,参考修复后的代码:
// 先定义全局的AppName变量,确保变量存在才能正常调用addMenu
const AppName = "Formula Analyzer";

function onInstall(e) {
  onOpen(e);
  console.log("FA onInstall...");
}

function onOpen(e) {
  console.log("FA onOpen...");
  // 权限模式判断,无权限时先添加引导授权的菜单
  if (e && e.authMode === ScriptApp.AuthMode.NONE) {
    SpreadsheetApp.getActive().addMenu(AppName, [
      {name: '启用插件', functionName: 'authorizeAndInit'}
    ]);
    return;
  }
  // 权限足够时加载完整功能菜单
  var spreadsheet = SpreadsheetApp.getActive();
  var menuItems = [
    {name: 'Trace precedents', functionName: 'tracePrecedents'},
    {name: 'Trace dependents', functionName: 'traceDependents'}
  ];
  spreadsheet.addMenu(AppName, menuItems);
}

// 新增授权初始化函数,用户点击后触发授权,完成后重新加载完整菜单
function authorizeAndInit() {
  onOpen({authMode: ScriptApp.AuthMode.LIMITED});
}
  1. 提交审核时,在审核备注里明确要求审核人员先完全卸载旧版本插件,再重新安装新版本进行测试,避免旧版本缓存影响测试结果。

内容的提问来源于stack exchange,提问作者OJNSim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:36:08