“For”循环仅在 Google 电子表格的 Apps 脚本中有效一次

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

所以我在 IT 课上,我们正在为 Google 表格制作自定义菜单,我很好奇,我想制作某种菜单循环。具有这种结构的东西:菜单 -> 子菜单 1 -> 子菜单 2 -> 子菜单 3 -> ... 等等。

我认为最好的选择是创建一个“for”循环,但我已经尝试了很多,但它不起作用。在尝试了一些事情之后,我拥有的最接近的东西是一段代码,令人惊讶的是(对我来说)有一个循环,但只创建一个子菜单(菜单 -> 子菜单 1)。我在循环中设置的重复次数并不重要。问题是什么??预先感谢并抱歉英语不好或愚蠢的问题(我是初学者)。

function onOpen(){
  var sheet = SpreadsheetApp;
  var menu = sheet.getUi().createMenu('Menu'); // create a menu
  var parentMenu = menu; // keep a reference to the parent menu
  var subMenu;
  for(i=1 ; i<=5 ; i++){
    subMenu = sheet.getUi().createMenu('Submenu ' + i).addItem('Filling', 'function');
    parentMenu.addSubMenu(subMenu); // add the subMenu to the parentMenu
    parentMenu = subMenu; // update the parentMenu for the next iteration
  }
  menu.addToUi(); // apply everything
}
javascript google-sheets google-apps-script google-sheets-api
1个回答
0
投票

修改要点:

  • 在您的脚本中,
    parentMenu = menu
    是第一次运行。并且,
    subMenu
    sheet.getUi().createMenu('Submenu ' + i).addItem('Filling', 'function')
    。并且,在第一个循环中,运行
    parentMenu.addSubMenu(subMenu)
    后,运行
    parentMenu = subMenu
    。这样,
    parentMenu
    就变成了
    subMenu
    。所以,
    menu
    只有第一个循环的
    sheet.getUi().createMenu('Submenu ' + i).addItem('Filling', 'function')
    。并且,在
    menu.addToUi()
    ,添加了自定义菜单。通过此流程,自定义菜单中仅显示“子菜单1”。我猜这可能是您当前问题的原因。

虽然我不确定你的问题中的

function
addItem('Filling', 'function')
,但在这种情况下,作为一个简单的修改,请测试以下修改。

修改后的脚本1:

function onOpen() {
  var sheet = SpreadsheetApp;
  var menu = sheet.getUi().createMenu('Menu'); // create a menu
  var parentMenu = menu; // keep a reference to the parent menu
  var subMenu;
  for (i = 1; i <= 5; i++) {
    subMenu = sheet.getUi().createMenu('Submenu ' + i).addItem('Filling', 'function');
    parentMenu.addSubMenu(subMenu); // add the subMenu to the parentMenu
    // Remove this line. parentMenu = subMenu; // update the parentMenu for the next iteration
  }
  menu.addToUi(); // apply everything
}

由此得到以下结果。

enter image description here

修改后的脚本2:

作为一个简单的脚本,下面的修改如何?获得与上述脚本相同的结果。

function onOpen() {
  var sheet = SpreadsheetApp;
  var menu = sheet.getUi().createMenu('Menu');
  for (var i = 1; i <= 5; i++) {
    var subMenu = sheet.getUi().createMenu('Submenu ' + i).addItem('Filling', 'function');
    menu.addSubMenu(subMenu);
  }
  menu.addToUi();
}
© www.soinside.com 2019 - 2024. All rights reserved.