ОП пытается создать динамическое меню, в котором перечислены все листы в электронной таблице.Код OP очень близок к работе - есть небольшое, но значительное количество корректировок.
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('OPSWMS CREATER')
.addItem('Create New SWMS', 'showPrompt')
.addSeparator();
var sheetList = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var subMenu = ui.createMenu('OPTest Menu');
for (var i = 0; i < sheetList.length; i++) {
subMenu.addItem(sheetList[i].getName(), 'showPrompt');
}
menu.addSubMenu(subMenu).addToUi();
}
Краткое изложение основных отличий:
1) переменная ui
выведена из цикла;и затем повторно использовать, где это возможно.
2) переменная menu
установлена и также выведена из цикла.Это повторно используется для добавления subMenu в последней строке кода.
3) добавили точку с запятой после .addSeparator()
(хотя и необязательного)
4) использованного .getSheets()
дляполучить все листы. Это первый ключевой элемент, отсутствующий в коде операции .
5) пропущенная строка var numsheets
.Вам это не нужно, потому что вы можете получить тот же счет на sheetList
.
6) в цикле, отметив две вещи:
sheetList[i]
i в квадратных скобках ([i]
) возвращает соответствующий элемент из «sheetList»; .getName()
возвращает имя листа.В совокупности sheetList[i].getName()
дает вам имя листа и позволяет добавить его в качестве элемента меню.
7) menu.addSubMenu(subMenu).addToUi();
Это добавит содержимое цикла в меню. Это второй ключевой элемент, отсутствующий в коде операции .
Кредит :
Ответ Акшина Джалилова на Скрипт Google Apps: динамическое создание меню электронных таблицтовар