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

如何为Google Sheets主菜单不同菜单项配置对应网站跳转链接?

解决Google Sheets自定义菜单打开不同网站的问题

问题原因

当前代码中两个子菜单项都绑定了同一个openWebsite函数,且函数内硬编码了固定URL,导致点击任何子项都会打开同一网站。

方案一:独立函数实现(简单直接)

修改菜单创建脚本,让每个子项绑定专属处理函数:

const onOpen = () => {
  const ui = SpreadsheetApp.getUi();
  const parentMenu = ui.createMenu('Partners');
  
  parentMenu.addItem('Thebest50s', 'openBest50Website');
  parentMenu.addItem('The20best', 'openBest20Website');
  parentMenu.addToUi();
};

添加两个独立的网站打开函数:

const openBest50Website = () => {
  const htmlTemplate = HtmlService.createTemplateFromFile('url.html');
  htmlTemplate.url = 'https://www.theworlds50best.com/list/1-50';
  const htmlOutput = htmlTemplate.evaluate().setHeight(50).setWidth(200);
  const ui = SpreadsheetApp.getUi();
  ui.showModelessDialog(htmlOutput, 'Thebest50s');
  Utilities.sleep(2000);
};

const openBest20Website = () => {
  const htmlTemplate = HtmlService.createTemplateFromFile('url.html');
  htmlTemplate.url = 'https://www.getbento.com/blog/best-restaurant-websites-design/';
  const htmlOutput = htmlTemplate.evaluate().setHeight(50).setWidth(200);
  const ui = SpreadsheetApp.getUi();
  ui.showModelessDialog(htmlOutput, 'The20best');
  Utilities.sleep(2000);
};

方案二:工厂函数实现(避免代码重复)

如果需要减少重复代码,可以用工厂函数生成不同的处理实例:

const onOpen = () => {
  const ui = SpreadsheetApp.getUi();
  const parentMenu = ui.createMenu('Partners');
  
  parentMenu.addItem('Thebest50s', 'openWebsiteFor50');
  parentMenu.addItem('The20best', 'openWebsiteFor20');
  parentMenu.addToUi();
};

// 生成网站打开函数的工厂
const createWebsiteOpener = (url, dialogTitle) => {
  return () => {
    const htmlTemplate = HtmlService.createTemplateFromFile('url.html');
    htmlTemplate.url = url;
    const htmlOutput = htmlTemplate.evaluate().setHeight(50).setWidth(200);
    SpreadsheetApp.getUi().showModelessDialog(htmlOutput, dialogTitle);
    Utilities.sleep(2000);
  };
};

// 创建对应菜单项的函数实例
const openWebsiteFor50 = createWebsiteOpener(
  'https://www.theworlds50best.com/list/1-50',
  'Thebest50s'
);

const openWebsiteFor20 = createWebsiteOpener(
  'https://www.getbento.com/blog/best-restaurant-websites-design/',
  'The20best'
);

注意事项

  • 你的url.html文件无需修改,它会通过模板变量url动态获取对应网址。
  • 修改完成后,重新加载Google Sheets(或手动运行onOpen函数),菜单即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:50:21