Возможно ли иметь один script для нескольких электронных таблиц?

У меня есть одна главная таблица и несколько копий. В этой мастер-таблице используются некоторые сценарии.

Можно ли связать все копии этой главной таблицы с тем же script, что и в главной электронной таблице?

Цель:

  • изменения в сценариях в главной электронной таблице автоматически используются копиями
  • aka: низкое обслуживание

Ответ 1

amleczko прав: вы должны использовать новую библиотеку в Google Apps script.

Однако на сегодняшний день вы не сможете делать именно то, что хотите (используя тот же script для нескольких таблиц). Вместо этого вы можете сохранить версию script (Файлы > Управление версиями...), чтобы создать библиотеку. Затем импортируйте эту библиотеку в другие электронные таблицы (Ресурсы > Управление библиотеками...). Включите "режим разработки", чтобы каждое сделанное изменение немедленно вносило изменения в электронные таблицы, используя эту библиотеку. В противном случае вам нужно будет сохранить новую версию библиотеки для каждого изменения и вручную обновить номер версии библиотеки в каждой таблице, используя ее.

Проблема в том, что вам нужно написать script в каждой таблице, используя вашу библиотеку, с такими скелетными функциями:

function doSomething(){
   myLibrary.doSomething();
} 

Ответ 2

Невозможно таким образом, чтобы вы думали. По крайней мере, еще нет (см. проблема 40).

Но, в зависимости от вашего использования script, вы можете связать их "трудным путем" или даже лучше, используйте только один script. script в главной электронной таблице может открывать другие файлы электронных таблиц и выполнять свою работу "удаленно". Не требуется, чтобы script размещался в электронной таблице для взаимодействия с ним (чтение/запись на нем). Вам понадобится только script, размещенный в электронной таблице, если вы собираетесь использовать триггеры событий электронной таблицы, то есть на открытом, on-edit и on-form-submit.

Может быть, вы можете создать приятный интерфейс для script на листе мастер и опубликовать его как службу. Затем для копирования одного и того же интерфейса на другой вкладке браузера есть только ссылка на копии. Добавление параметров в ссылку пользовательский интерфейс script может даже адаптироваться к конкретной электронной таблице, которая "запускает" ее.

Хорошо, это все, что я могу себе представить. Но, к сожалению, есть некоторые варианты использования, которые просто не соответствуют этим приятным "обходным решениям". Для них можно только issue 40 (чтобы проголосовать и отслеживать обновления) и надеяться, что он скоро будет развит.

Ответ 4

Решение, которое я установил в этом контексте, состояло в том, чтобы иметь сайт Google, где встроен мастер Script и где также встроена электронная таблица

Затем script, ссылаясь на выделенную электронную таблицу, ищет имя страницы сайта Google, просматривает электронную таблицу мастера и получает идентификатор электронной таблицы, встроенной в страницу.

Ответ 5

Я решил эту проблему при использовании script, который автоматически генерирует электронные таблицы.

Как правило, я добавлю лист в любую электронную таблицу с script под названием "Информация". Я буду использовать это для хранения информации, которая важна для script. В моем script, который автоматически создает больше электронных таблиц, я отслеживаю идентификатор созданного листа. Таким образом, я могу быстро вызвать все "связанные" листы и взаимодействовать с ними с помощью того же script. Возможно, даже стоит записать script на одном листе и полностью отделить его от вашего основного листа или его детей.

Взгляните на эту функцию, она может дать вам некоторые идеи.

SpreadsheetApp.openById(id)