Мы создаем базу данных листов Google, где каждый пользователь имеет свою собственную электронную таблицу, которая обращается к центральному листу для получения информации с помощью скрипта приложений.
Это означает, что с 50 сотрудниками у нас есть 50 таблиц для обслуживания. Я пытаюсь найти способ поместить обновления во все 50 электронных таблиц, не обновляя каждый вручную. У меня есть весь код сценариев приложений в библиотеке, на который ссылается каждый лист пользователя, поэтому мне нужно разобраться с поддержкой кодирования. Но поддерживать в актуальном состоянии электронную таблицу для каждого пользователя с новейшими функциями сложно.
Один из способов, которым я рассчитываю это сделать, - это создать пользовательский лист «Шаблон», который будет обновляться с изменениями / новыми функциями. Затем, когда каждый пользователь открывает свою электронную таблицу, он перекрестно ссылается на все свои листы на листе шаблона и проверяет, нужно ли заменить его лист на последний лист, основываясь на времени, когда он был обновлен в листе шаблона. Например, если лист «Отчет о проекте» в шаблоне новее, чем лист «Отчет о проекте» в электронной таблице пользователя, пользователь SS удаляет свой текущий «Отчет о проекте» и копирует лист шаблона «Отчет о проекте» в свой собственный с помощью метод copyTo ().
У меня все это работает со скриптом приложений, но теперь проблема в том, что когда локальный лист пользователя удаляется и заменяется новым обновленным сегментом, все ссылки на формулы на этот лист на других листах ломаются и заменяют ссылку на #REF , Я планировал преодолеть это, используя только именованные диапазоны, но даже именованные диапазоны ломаются, когда лист заменяется на точку, в которой даже скрипт приложения больше не может найти именованный диапазон, потому что именованный диапазон, который он ищет, автоматически переименовывается, когда была импортирована новая версия листа (иначе, «CustomNamedRange» в шаблоне SS был переименован в «« SheetName »! CustomNamedRange» в пользовательском SS).
Единственный известный мне способ преодоления этой проблемы на данный момент - это создание централизованной электронной таблицы «Range Index», в которой есть все именованные диапазоны с их целевым листом и диапазоном. Я должен был бы создать пользовательскую функцию, которая фильтрует по индексу диапазона и находит нужный адрес на основе заданного имени. Например, вместо вызова «CustomNamedRange» в формуле листа я бы вызвал пользовательскую функцию: getNamedRange («CustomNamedRange»), и скрипт приложения вернул бы диапазон, найденный в индексе диапазона. И когда лист заменяется более новой версией, никакие ссылки не прерываются, потому что все ссылки проходят через функцию фильтра скрипта приложения.
Единственная проблема с этим заключается в том, что я могу предвидеть, что этот метод (вызов каждого диапазона, необходимого в скрипте, с помощью пользовательской функции) замедляет мою электронную таблицу. LOT, потому что каждый раз, когда вызывается диапазон, ему придется проходить поиск индекс диапазона, чтобы найти и вернуть его.
У кого-нибудь есть другие идеи о том, как добиться того, что я ищу? Как сохранить 50+ отдельных таблиц, обновленных новыми функциями, без необходимости делать это вручную и не нарушая все ссылки?
Извините за длинный пост, но я ценю любые идеи!