Лучшие практики для нескольких функций OnEdit - PullRequest
0 голосов
/ 02 марта 2020

Проблема

  • У меня есть 6 функций OnEdit, которые работают по отдельности, но когда они вместе, они не работают, как задумано. Под этим я подразумеваю, что некоторые просто не срабатывают.

Свойства скрипта

  • У них разные имена - function onEdit(e) {code}, function onEdit1(e1) {code}, function onEdit2(e2) {code}, function onEdit3(e3) {code}, function onEdit4(e4) {code}, function onEdit5(e5) {code}
  • Все они находятся на одной вкладке .gs
  • Некоторые из них имеют одинаковые переменные. Например, OnEdit имеет var range = e.range;, а OnEdit5 имеет var range = e5.range;

Мое понимание

  • Я считаю, что вы можете запустить несколько функций OnEdit в пределах та же вкладка .gs. Это правильно? Или мне нужно как-то создавать новые вкладки .gs?
  • Я считаю, что мои функции onEdit должны называться по-разному, поэтому они вызываются правильно. Это правильно, или я должен избавиться от различных функций и объединить их в одну массивную функцию? (Я предполагаю, что это приведет к более медленному выполнению и большему количеству случаев невозможности изолировать неправильный код).
  • Я считаю, что переменные, которые создаются внутри каждой функции, задают c для этой функции. Это правда? Или они влияют друг на друга?

Почему я задаю этот вопрос

Кажется, итерации этого вопроса уже задавались ранее. Но люди обычно дают советы по интеграции двух функций в одну большую, а не готовят кого-то интегрировать 10-20 различных функций OnEdit. Они также не дают четкого указания на лучшие практики кодирования.

Я часами читал эту тему и чувствую, что новички в сценариях, такие как я, очень выиграют от этого.

Заранее благодарю за любой вклад!

1 Ответ

1 голос
/ 03 марта 2020

Примечания:

  • Может быть только одна функция с одинаковым именем. Если их два, последний перезапишет первый. Как будто первого никогда не существовало.
  • Функция с именем onEdit запускается автоматически при включении (как вы уже догадались!) Edit
  • Нет простого триггера для других имен, таких как onEdit1 или onEdit2 ....
  • Простые триггеры ограничены 30 секундами выполнения.
  • Таким образом, в одном файле code.gs или даже в одном проекте может быть только одна функция с именем onEdit, и она успешно сработает.
  • Если вы создаете несколько проектов, onEdit будет запускаться в каждом проекте асинхронно. Но существуют ограничения на количество проектов, которые могут быть созданы, и будут применяться другие квоты.
  • В качестве альтернативы, вы можете использовать установленные триггеры: без ограничения 30 с. Вы также можете использовать любое имя для своей функции.
  • Лучший способ оптимизировать функции - это , чтобы никогда не касаться электронной таблицы, если это не является абсолютно необходимым . Например, sorting различные значения внутри скрипта лучше, чем многократный вызов .sort для нескольких диапазонов несколько раз. Чем меньше взаимодействие между листами и скриптами, тем лучше. Для высокооптимизированного сценария потребуется всего два вызова электронной таблицы: один для получения данных, а другой для установки данных.
  • После оптимизации количества обращений к листу вы можете оптимизировать сам скрипт: управляйте логикой c так, чтобы для каждого редактирования выполнялось только необходимое количество операций. Например, если редактирование выполняется в A1 (флажки A1, B1 - это флажки, если щелчок очищает соответственно A2: A10, B2: B10), вам следует проверить, нажали ли A1, и если щелкнуть, очистить диапазон и выйти, а не проверять. для B1 снова. Оптимизация скриптов требует, по крайней мере, базовых c знаний JavaScript объектов. Тем не менее, это не так эффективно, как уменьшение количества вызовов, что является самой медленной частью любого скрипта приложения.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...