Я хочу создать настраиваемое меню в моем Листе Google, в котором есть список всех номеров счетов пациентов на этом листе.Просто чтобы проверить, возможно ли это, я создал объект и сохранил в нем базовую функцию, просто предупреждение с именем учетной записи, причем каждой функции назначается ключ от номера самой учетной записи.
У меня естьмассив номеров счетов, я перебираю этот массив и создаю ключ в объекте для каждого номера счета и сохраняю базовую функцию в каждом ключе.obj [acctNum] = function () {SpreadsheetApp.getUi (). alert (acctNum)}.Теперь, когда у меня есть функция для каждого номера счета, я хочу динамически передать этот номер счета и функцию в подменю для пользовательского меню в моем Листе Google.
Я получил все, кроме фактического вызовафункция.Я могу динамически создавать меню и подменю, которые будут содержать каждый номер счета в электронной таблице.Я создал объект с функциями.Я даже могу явно вызвать функцию самостоятельно, набрав obj[acctNum]().
Когда я передаю имя функции в виде строки в метод .addItem (string, string), я передаю его точнокак это должно быть.Вы увидите в коде ниже.
Я предполагаю, что я не понимаю что-то о том, как метод .getUi (). CreateMenu () вызывает функции и / или что-то о концепции "серверной стороны".Я программист-самоучка, поэтому я практически ничего не знаю о том, как компилировать код и все это работает.Я предоставил весь код, связанный с этой проблемой ниже.К сожалению, я не могу поделиться своим файлом, потому что он содержит информацию, защищенную HIPPA.Если все сводится к этому, я могу создать фиктивный файл с поддельными номерами учетных записей, чтобы продемонстрировать проблему / процесс.
Мой вопрос: как я могу динамически создавать функции и переходить в пользовательские меню Google с помощьювозможность вызывать эти динамически созданные функции?
Эта часть кода перебирает два созданных мной отдельных объекта, имеющих один ключ (AcctNums), и этот ключ представляет собой массив, образующий список номеров счетов.На моем листе есть закрытые учетные записи и открытые учетные записи.
var functions = {};
openFiles.AcctNums.forEach(function (accNum) {
functions[accNum] = function () {
SpreadsheetApp.getUi().alert(accNum);
}
});
closedFiles.AcctNums.forEach(function (accNum) {
functions[accNum] = function () {
SpreadsheetApp.getUi().alert(accNum);
}
});
Ниже приведен код, в котором я создаю пользовательское меню и перебираю те же два объекта, что и выше, создаю элемент для каждого номера счета и передаюимя функции, основанное на имени ключа в объекте (functions [accNum]).Весь этот код компилируется правильно, и я получаю настраиваемое меню на листе с перечисленными параметрами, и все номера счетов заполняются как элементы.
function onOpen(e) {
var ui = SpreadsheetApp.getUi()
var parentMenu = ui.createMenu("Claim Path Tools")
var oACF = ui.createMenu("Open a closed file");
openFiles.AcctNums.forEach(function (accNum) {
oACF.addItem(accNum,"functions[\"" + accNum + "\"]");
})
var cAOF = ui.createMenu("Close an open file");
closedFiles.AcctNums.forEach(function (accNum) {
cAOF.addItem(accNum,"functions[\"" + accNum + "\"]");
})
parentMenu.addSubMenu(oACF).addSubMenu(cAOF).addToUi()
}
Ожидаемый результат: всякий раз, когда я нажимаю на один из пунктов вВ пользовательском меню я получаю предупреждение с соответствующим номером счета.
Фактический результат: я получаю сообщение об ошибке:
"Функция сценария не найдена: functions [" COOC2018-71 "] Длядополнительную информацию см. https://developers.google.com/apps-script/reference/base/menu#addItem(String,String)"
ПРИМЕЧАНИЕ: "COOC2018-71" - это один из многих номеров счетов на странице. Кроме того, если я вписываю где-нибудь код functions["COOC2018-71"]()
, он правильно вызываетфункция и дает мне предупреждение с номером учетной записи. Это то, что я ожидал, что меню также будет делать, но он не может найти функцию, когда я вызываю ее из меню.