如何为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
相关产品推荐
相关产品推荐

