简体   繁体   中英

How I create a SubMenu whit google script

I need to know how create a simple menu with 2 menu items( A and B ): the first one(A) contains 1 item ( A1 ),the second one(B), contains 3 items inside( B1,B2,B3 )

I can create an example but always fail:

CODE

      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);

RESULT

失败

and i need something like (hidding A1,B1,B2,B3 : showing when focus A|B):

    ____
    A
        A1
    ____
    B
        B1
        B2
        B3

THIS IS MY SPREAD:

失败2

Please Help!!

Hmm, as Serge pointed out my prev. answer is wrong. Meanwhile I found out, what the real reason is: The MenuItem having the submenu must not have a handler:

 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);

I done it but I have a problem with handers which can't be used(both serverhandle and clienthandler) becouse the parameter 'e' is undefined or void: (Also a problem with MenuItemID)

  • I need to know which button is presed knowing 'e' and dont know whats wrong.

     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; };

menuSpreadsheet

菜单 1

submenuSpreadsheet

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM