Javascript 如何使用google脚本创建子菜单
我需要知道如何创建一个包含两个菜单项(a和B)的简单菜单:第一个菜单(a)包含一个菜单项(A1),第二个菜单(B)包含三个菜单项(B1、B2、B3) 我可以创建一个示例,但总是失败: 代码Javascript 如何使用google脚本创建子菜单,javascript,google-apps-script,Javascript,Google Apps Script,我需要知道如何创建一个包含两个菜单项(a和B)的简单菜单:第一个菜单(a)包含一个菜单项(A1),第二个菜单(B)包含三个菜单项(B1、B2、B3) 我可以创建一个示例,但总是失败: 代码 var handler = app.createServerHandler(); //Create menu bar var menuBar = app.createMenuBar(true); var data = ss.getSheets()[LOG_SH
var handler = app.createServerHandler();
//Create menu bar
var menuBar = app.createMenuBar(true);
var data = ss.getSheets()[LOG_SHEET_INDEX].getDataRange().getValues();
var lastRow = ss.getLastRow();
for(var row = 1; row < lastRow; row++){
var id_menu =1;
if(data[row][0]==0){
var nivel = data[row][1];
var menuItem = app.createMenuItem(data[row][2], handler);
var separator = app.createMenuItemSeparator();
menuBar.addSeparator(separator);
var subMenu = app.createMenuBar(true).setId("subMenu"+nivel);
for(var i = 1; i< lastRow; i++){
if(data[i][0]==nivel){
var sm = app.getElementById("subMenu"+nivel)
this[sm.addItem(data[row][2], handler)];
}
}menuItem.setSubMenu(sm);
}menuBar.addItem(data[row][2], app.createMenuBar(true));
}
app.add(menuBar);
这是我的摊位:
请帮忙 对不起,你还不能拥有它:嗯,正如谢尔盖指出的我的上一篇文章。答案是错的。同时我发现,真正的原因是: 具有子菜单的菜单项不能有处理程序:
var menuBar=app.createMenuBar();
var subb1=app.createMenuBar(true);
subb1.addItem (app.createMenuItem("S1", handler1));
subb1.addItem (app.createMenuItem("S2", handler2));
var mi1=app.createMenuItem("X1", null); // passing null and not a handler makes submenu work...
mi1.setSubMenu(subb1);
menuBar.addItem(mi1);
app.add(menuBar);
我这样做了,但我有一个无法使用的handers问题(serverhandle和clienthandler),因为参数“e”未定义或无效:(MenuItemID也有问题)
- 我需要知道哪个按钮显示为“e”,不知道出了什么问题
do get(){ var app = UiApp.createApplication() var menu = menuBar(); var panel = app.createAbsolutePanel().setId("Panel"); var horizontalPanel = app.createHorizontalPanel().setId("horizontalPanel"); var verticalPanelDoc = app.createVerticalPanel().setId("verticalPanelDoc"); var verticalPanelMenu = app.createVerticalPanel().setId("verticalPanelMenu"); var scrollPanelDoc = app.createScrollPanel().setId("scrollPanelDoc").setSize('1000', '600'); verticalPanelMenu.add(menu); verticalPanelDoc.add(scrollPanelDoc); horizontalPanel.add(verticalPanelMenu); horizontalPanel.add(verticalPanelDoc); panel.add(horizontalPanel) app.add(panel); return app; } function show(e){ var ss =SpreadsheetApp.openById(TABLA_MENU); //**testing 'e' = undefined or void** var e_source = e.parameter.source; ss.getSheetByName("menu").getRange("B"+6).setValue(e_source); ss.getSheetByName("menu").getRange("C"+6).setValue(e); //**result in cells : e_source = undefined e = {parameter={}}** var app = UiApp.getActiveApplication(); var panel = app.getElementById("Panel"); var verticalPanelDoc = app.getElementById("verticalPanelDoc"); var horizontalPanel = app.getElementById("horizontalPanel"); var scrollPanelDoc = app.getElementById("scrollPanelDoc"); verticalPanelDoc.clear(); verticalPanelDoc.remove(scrollPanelDoc); //**this will depend of 'e' ** var panelToShow = app.createCaptionPanel().setTitle("Show").setText("Show"); // var label = app.createLabel().setText("Works!"); panelToShow.add(label); verticalPanelDoc.add(panelToShow); return app; }; function menuBar(){ var ss = SpreadsheetApp.openById(TABLA_MENU); var app = UiApp.getActiveApplication(); var absolutePanel = app.getElementById("absolutePanel"); var verticalPanelMenu = app.getElementById("verticalPanelMenu"); var horizontalPanel = app.getElementById("horizontalPanel"); var option_menu = app.getElementById("option_menu"); var arrayMenu = ss.getSheetByName("menu").getDataRange().getValues(); var arraySubMenu =ss.getSheetByName("submenu").getDataRange().getValues(); var arrayEnlacesSubMenu =ss.getSheetByName("enlaces").getDataRange().getValues(); var test1 = arraySubMenu[1][1];//A1 var test2 = arrayMenu[1];//A var test3 = arrayEnlacesSubMenu[1][1] // **create menu** var menuBar = app.createMenuBar(true).setAnimationEnabled(true); var handler = app.createServerHandler("show") .addCallbackElement(verticalPanelMenu) .addCallbackElement(horizontalPanel) .addCallbackElement(absolutePanel); // **add structure to menu** for(var k=1; k<arrayMenu.length; k++) { menuBar.addItem(arrayMenu[k][1], arrayMenu[k][1] = app.createMenuBar(true).setWidth("100%")).setWidth("100%"); for(var j=1; j<arraySubMenu[k].length; j++){ if(arraySubMenu[k][j]!=''){ var enlace = arrayEnlacesSubMenu[j][1].toString(); var a = arrayMenu[k][1]; var b = arraySubMenu[k][j]; //var c = this[arrayMenu[k][1]].addItem(arraySubMenu[k][j],handler).addSeparator(app.createMenuItemSeparator()) arrayMenu[k][1].addItem(arraySubMenu[k][j],handler).setId("1"+arraySubMenu[k][j])).addSeparator(app.createMenuItemSeparator()); //**THIS ID nither set the ID* show in navigator ID = ... class="gwt-MenuItem" id="gwt-uid-18" role="menuitem" aria-hasp....pan="1">Publicaciones 2012</td> } } menuBar.addSeparator(app.createMenuItemSeparator()); } return menuBar; };
doget(){ var app=UiApp.createApplication() var menu=menuBar(); var panel=app.createAbsolutePanel().setId(“面板”); var horizontalPanel=app.createHorizontalPanel().setId(“horizontalPanel”); var verticalPanelDoc=app.createVerticalPanel().setId(“verticalPanelDoc”); var verticalPanelMenu=app.createVerticalPanel().setId(“verticalPanelMenu”); var scrollPanelDoc=app.createScrollPanel().setId(“scrollPanelDoc”).setSize('1000','600'); 垂直面板菜单。添加(菜单); verticalPanelDoc.add(scrollPanelDoc); 添加(垂直面板菜单); 水平面板。添加(垂直面板文档); 面板。添加(水平面板) 应用程序添加(面板); 返回应用程序; } 功能表演(e){ var ss=电子表格应用程序openById(表格菜单); //**测试“e”=未定义或无效** var e_source=e.parameter.source; ss.getSheetByName(“菜单”).getRange(“B”+6).setValue(e_源); ss.getSheetByName(“菜单”).getRange(“C”+6).setValue(e); //**单元格中的结果:e_source=未定义的e={parameter={}** var app=UiApp.getActiveApplication(); var panel=app.getElementById(“panel”); var verticalPanelDoc=app.getElementById(“verticalPanelDoc”); var horizontalPanel=app.getElementById(“horizontalPanel”); var scrollPanelDoc=app.getElementById(“scrollPanelDoc”); verticalPanelDoc.clear(); verticalPanelDoc.remove(scrollPanelDoc); //**这将取决于“e”的类型** var panelToShow=app.createCaptionPanel().setTitle(“显示”).setText(“显示”); // var label=app.createLabel().setText(“Works!”); 面板显示。添加(标签); verticalPanelDoc.add(panelToShow); 返回应用程序; }; 函数menuBar(){ var ss=电子表格应用程序openById(表格菜单); var app=UiApp.getActiveApplication(); var absolutePanel=app.getElementById(“absolutePanel”); var verticalPanelMenu=app.getElementById(“verticalPanelMenu”); var horizontalPanel=app.getElementById(“horizontalPanel”); var option_menu=app.getElementById(“option_menu”); var arrayMenu=ss.getSheetByName(“菜单”).getDataRange().getValues(); var arraySubMenu=ss.getSheetByName(“子菜单”).getDataRange().getValues(); var arrayEnlacesSubMenu=ss.getSheetByName(“enlaces”).getDataRange().getValues(); var test1=arraySubMenu[1][1];//A1 var test2=arrayMenu[1];//A var test3=arrayEnlacesSubMenu[1][1] //**创建菜单** var menuBar=app.createMenuBar(true).setAnimationEnabled(true); var handler=app.createServerHandler(“显示”) .addCallbackElement(垂直面板菜单) .AddCallback元素(水平面板) .AddCallback元素(绝对面板); //**向菜单添加结构**
对于(var k=1;k此引用了电子表格菜单的增强请求…问题是关于UI菜单…您从中得到了什么?在isue中,写着“用户请求能够拥有自定义菜单和子菜单(例如,带有子菜单项的菜单项)。”。这里的这个,虽然通过电子表格找到要添加的菜单项,但在UI级添加了菜单项。首先,第317期是在2010年提交的,2010年没有UiApp!问题显然是关于UiApp中的菜单(请参见代码:app.getElementById(…)对我来说,这一点没有任何疑问。请看,317中合并了这一点。你是对的。对我来说,这显然是它不起作用的原因,因为我尝试实现了一个示例,但它也不起作用。但现在我知道了为什么我的示例(以及这个示例)不起作用不起作用,请参见下一个答案。挖得不错!您是否尝试单独添加处理程序?没有处理程序的菜单不是很有用,是吗?如果您将处理程序添加到承载子菜单的菜单项中,那么当您单击它时,您的处理程序将被调用,子菜单将不会打开。因此,在代码中一定有一个决定“如果是hander,那么调用它,如果有子菜单,那么显示它。”因此子菜单被处理程序隐藏。你是对的,处理程序可以添加到子菜单项中…在第一级有处理程序是没有意义的(我没有足够准确地考虑它;-)你能帮我找到一个解决方案吗?他得到了子菜单:完成了!我只是没能得到e so in.addCallBackElement()而不是我写的面板名称:addCallBackElement(app.createHidden(“id_选项”,arraySubMenu[k][j])。setId(“id_选项”)),然后用e.parameterid_选项获得id(因此“e”不是空的)do get(){ var app = UiApp.createApplication() var menu = menuBar(); var panel = app.createAbsolutePanel().setId("Panel"); var horizontalPanel = app.createHorizontalPanel().setId("horizontalPanel"); var verticalPanelDoc = app.createVerticalPanel().setId("verticalPanelDoc"); var verticalPanelMenu = app.createVerticalPanel().setId("verticalPanelMenu"); var scrollPanelDoc = app.createScrollPanel().setId("scrollPanelDoc").setSize('1000', '600'); verticalPanelMenu.add(menu); verticalPanelDoc.add(scrollPanelDoc); horizontalPanel.add(verticalPanelMenu); horizontalPanel.add(verticalPanelDoc); panel.add(horizontalPanel) app.add(panel); return app; } function show(e){ var ss =SpreadsheetApp.openById(TABLA_MENU); //**testing 'e' = undefined or void** var e_source = e.parameter.source; ss.getSheetByName("menu").getRange("B"+6).setValue(e_source); ss.getSheetByName("menu").getRange("C"+6).setValue(e); //**result in cells : e_source = undefined e = {parameter={}}** var app = UiApp.getActiveApplication(); var panel = app.getElementById("Panel"); var verticalPanelDoc = app.getElementById("verticalPanelDoc"); var horizontalPanel = app.getElementById("horizontalPanel"); var scrollPanelDoc = app.getElementById("scrollPanelDoc"); verticalPanelDoc.clear(); verticalPanelDoc.remove(scrollPanelDoc); //**this will depend of 'e' ** var panelToShow = app.createCaptionPanel().setTitle("Show").setText("Show"); // var label = app.createLabel().setText("Works!"); panelToShow.add(label); verticalPanelDoc.add(panelToShow); return app; }; function menuBar(){ var ss = SpreadsheetApp.openById(TABLA_MENU); var app = UiApp.getActiveApplication(); var absolutePanel = app.getElementById("absolutePanel"); var verticalPanelMenu = app.getElementById("verticalPanelMenu"); var horizontalPanel = app.getElementById("horizontalPanel"); var option_menu = app.getElementById("option_menu"); var arrayMenu = ss.getSheetByName("menu").getDataRange().getValues(); var arraySubMenu =ss.getSheetByName("submenu").getDataRange().getValues(); var arrayEnlacesSubMenu =ss.getSheetByName("enlaces").getDataRange().getValues(); var test1 = arraySubMenu[1][1];//A1 var test2 = arrayMenu[1];//A var test3 = arrayEnlacesSubMenu[1][1] // **create menu** var menuBar = app.createMenuBar(true).setAnimationEnabled(true); var handler = app.createServerHandler("show") .addCallbackElement(verticalPanelMenu) .addCallbackElement(horizontalPanel) .addCallbackElement(absolutePanel); // **add structure to menu** for(var k=1; k<arrayMenu.length; k++) { menuBar.addItem(arrayMenu[k][1], arrayMenu[k][1] = app.createMenuBar(true).setWidth("100%")).setWidth("100%"); for(var j=1; j<arraySubMenu[k].length; j++){ if(arraySubMenu[k][j]!=''){ var enlace = arrayEnlacesSubMenu[j][1].toString(); var a = arrayMenu[k][1]; var b = arraySubMenu[k][j]; //var c = this[arrayMenu[k][1]].addItem(arraySubMenu[k][j],handler).addSeparator(app.createMenuItemSeparator()) arrayMenu[k][1].addItem(arraySubMenu[k][j],handler).setId("1"+arraySubMenu[k][j])).addSeparator(app.createMenuItemSeparator()); //**THIS ID nither set the ID* show in navigator ID = ... class="gwt-MenuItem" id="gwt-uid-18" role="menuitem" aria-hasp....pan="1">Publicaciones 2012</td> } } menuBar.addSeparator(app.createMenuItemSeparator()); } return menuBar; };