如何知道点击了哪个菜单项?

问题描述 投票:0回答:2

我正在通过 Google 电子表格中的 REST 调用创建动态自定义菜单。每次通话时我都会收到不同的运动项目,我想将它们用作菜单项

  // sample sports array
  var menuItemsArr = ['Footbal', 'Tennis', 'Swimming'];

  var menu = SpreadsheetApp.getUi().createMenu("Sports");
  for (i in menuItemsArr){
      menu.addItem(menuItemsArr[i],'createSheet')
       .addSeparator()
  }
  menu.addToUi();

当用户单击菜单项时,我想创建一个带有标题的新工作表 - 单击的运动。因此,如果用户选择“网球”,我想创建一个名为“网球”的工作表。

是否可以知道单击了哪个菜单项(以某种方式获取该项目的名称(网球),或者至少是单击的菜单项的索引?

任何帮助将不胜感激!谢谢。

google-apps-script google-sheets menu
2个回答
1
投票

Google Apps 脚本 .createMenu 和 .createAddonMenu 能够按字符串形式调用函数名称,并且仅在 Apps 脚本项目全局范围内查找具有该名称的函数。

另一种方法是使用带有 HTML 服务的对话框或侧边栏来创建用户界面。


0
投票

我意识到这是一篇相当老的帖子,但我确实需要它来避免大量的代码重复。以下是我如何使用 v8 运行时使其工作。菜单对象有可能变大,但这感觉比 Code.gs 文件中的自由浮动函数(如 menuThis()、menuThat() 和 menuSomeOtherThing())更干净。

const menu = {
    clickMe:
    {
        text: 'Click Me!',
        implementation: function() {
            SpreadsheetApp.getUi().alert(`You clicked: ${this.text}`);
            // Do other things or call your generic function needing the text
        }
    }
}

function onOpen()
{
    loadCustomMenu2();
}

function loadCustomMenu2()
{
    const menuName = "Custom Tools";
    const ui = SpreadsheetApp.getUi();

    ui.createMenu(menuName)
        .addItem(menu.clickMe.text, 'menu.clickMe.implementation')
        .addToUi();
}

© www.soinside.com 2019 - 2024. All rights reserved.