所以我在 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
}
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')
,但在这种情况下,作为一个简单的修改,请测试以下修改。
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
}
由此得到以下结果。
作为一个简单的脚本,下面的修改如何?获得与上述脚本相同的结果。
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();
}