Google Apps脚本:动态创建电子表格菜单项

问题描述:

我正尝试使用Google Apps脚本在Google表格中创建一个动态填充的菜单。Google Apps脚本:动态创建电子表格菜单项

  1. 我有一张表'Classes',我列出了我教授的课程。
  2. 在运行我的脚本时,我使用脚本读取并将这些类加载到数组中。
  3. 为了只在原来的'类'表中硬编码值,我想然后为每个类创建一个子菜单项。

该工作表被称为'类'。 课程表中的值为8H,9p1,9p2等。 它们在单元格A1:A12中。 在调试器中,数组menuItemArray会正确加载'Classes'表中所有预期的类。

我得到的错误是:

TypeError: Cannot find function addSubMenu in object 9p1. (line 13, file "Code")

这是步入线的时候

menuItemArrayClass = menuItemArray [menuCount] 

我将是任何帮助,以什么我做错了或者更好的方法真的很感激去做吧。

这里是我的代码:

function onOpen(e) { 
    var ui = SpreadsheetApp.getUi(); 
    var menuCount = 0; 
    ui.createMenu('Manage Timetable') 
    .addItem('First item', 'menuItem1') 
    .addSeparator() 

    var menuItemArray =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Classes').getDataRange().getValues(); 
    for (menuCount=1;menuCount < menuItemArray.length;++menuCount) { 
     var menuItemArrayClass = [] 
     menuItemArrayClass = menuItemArray [menuCount] 
     .addSubMenu(ui.createMenu('Manage Classes') 
      .addItem(menuItemArrayClass [menuCount] + 'Schedule Timetable', 'runBatch1')) 
     .addToUi(); 
    }  
} 
+0

非常感谢Akshin我会给一个尝试,谢谢,西蒙 –

试试这个:

function onOpen(e) { 
    var ui = SpreadsheetApp.getUi(); 
    var menuCount = 0; 
    var menu = ui.createMenu('Manage Timetable'); 
    menu.addItem('First item', 'menuItem1') 
    menu.addSeparator() 

    var menuItemArray =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Лист2').getDataRange().getValues(); 
    for (menuCount=0;menuCount < menuItemArray.length;menuCount++) { 
     var menuItemArrayClass = [] 
     menuItemArrayClass = menuItemArray [menuCount]; 
     menu.addSubMenu(ui.createMenu('Manage Classes') 
      .addItem(menuItemArrayClass + ' Schedule Timetable', 'runBatch1')) 
     menu.addToUi(); 
    }  
} 

如果从1个你失去第一行开始,所以我现在已更改为0。

而且需要动态分配脚本,但我不知道它们是如何在表单中设置的,因此我保持不变。

还不确定是否需要每次添加“管理类”菜单,但我保留它以防万一。

试试这个,因为它似乎更喜欢你想要的东西:

function onOpen(e) { 
    var ui = SpreadsheetApp.getUi(); 
    var menuCount = 0; 
    var menu = ui.createMenu('Manage Timetable') 
    .addItem('First item', 'menuItem1') 
    .addSeparator(); 
    var subMenu = ui.createMenu('Manage Classes'); 

    var menuItemArray =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Лист2').getDataRange().getValues(); 
    for (menuCount=0;menuCount < menuItemArray.length;menuCount++) { 
    var menuItemArrayClass = [] 
    menuItemArrayClass = menuItemArray [menuCount]; 
    subMenu.addItem(menuItemArrayClass + ' Schedule Timetable', 'runBatch1');  
    }  

    menu.addSubMenu(subMenu).addToUi(); 
} 
+0

Akshin - 很多很多的感谢,它的工作原理! –

+1

请检查我的答案是否正确 –