Я работаю с различными электронными таблицами Google, которые используют одинаковые таблицы и структуру.Все они также используют идентичный набор функций, которые выполняются с помощью пользовательских пунктов меню.
Чтобы сохранить функции только один раз для всех электронных таблиц, один служит библиотекой для всех остальных.Теперь возникает проблема: все электронные таблицы имеют набор индивидуальных свойств, которые необходимо передать вызовам функций библиотеки.Вот почему я сейчас делаю что-то вроде этого:
Функция выборки в библиотеке, которая доступна как lib
, а также построение меню для всех листов:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Actions')
.addItem("My Library Function", "trackingHelper")
.addItem("My 2nd Library Function", "anotherFunction")
.addToUi();
}
function trackingHelper(sheetProperties) {
do something and use the sheetProperties
}
А теперьВ «дочерних» листах я добавляю что-то вроде этого:
var sheetProperties = {key: value, ...}
function onOpen() {
lib.onOpen();
}
function trackingHelper() {
lib.trackingHelper(sheetProperties);
}
function anotherFunction() {
lib.anotherFunction(sheetProperties);
}
Проблема в том, что мне всегда нужно редактировать все листы, если я добавляю новые функции.Вот почему я хотел бы сделать что-то подобное с меню в электронной таблице библиотеки:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Actions')
.addItem("My Library Function", "lib.trackingHelper")
.addItem("My 2nd Library Function", "lib.anotherFunction")
.addToUi();
}
Поэтому я хочу добавить только один onOpen
с этим меню ко всем дочерним листам, чтобы избавить от необходимостидобавив все функции индивидуально.Но как я могу передать свои дочерние свойства сейчас?Я пытался использовать PropertiesService
, но выполнение скрипта из дочернего листа всегда давало область свойств листа библиотеки.
Есть ли возможность избежать необходимости переназначения всех локальных функций в функции библиотеки по порядкупередать некоторые специфичные для листа переменные?Большое спасибо.