Простые триггеры

Триггеры позволяют Google Apps Script автоматически запускать функцию при возникновении определенного события, например, при открытии документа. Простые триггеры — это набор зарезервированных функций, встроенных в Apps Script, таких как функция onOpen(e) , которая выполняется, когда пользователь открывает файл Google Docs, Sheets, Slides или Forms. Устанавливаемые триггеры предлагают больше возможностей, чем простые триггеры, но их необходимо активировать перед использованием. Для обоих типов триггеров Apps Script передает запускаемой функции объект события , содержащий информацию о контексте, в котором произошло событие.

Информацию об использовании триггеров в проектах надстроек Google Workspace см. в разделе «Триггеры для надстроек Google Workspace» .

Начиная

Для использования простого триггера создайте функцию, которая использует одно из следующих зарезервированных имен функций:

  • Функция onOpen(e) срабатывает, когда пользователь открывает электронную таблицу, документ, презентацию или форму, на редактирование которых у него есть разрешение.
  • onInstall(e) запускается, когда пользователь устанавливает надстройку редактора из Google Docs, Sheets, Slides или Forms.
  • onEdit(e) срабатывает, когда пользователь изменяет значение в электронной таблице.
  • onSelectionChange(e) срабатывает, когда пользователь изменяет выделение в электронной таблице.
  • doGet(e) запускается, когда пользователь посещает веб-приложение или программа отправляет HTTP GET запрос веб-приложению.
  • doPost(e) выполняется, когда программа отправляет HTTP POST запрос веб-приложению.

Параметр e в приведенных выше названиях функций представляет собой объект события , передаваемый функции. Этот объект содержит информацию о контексте, вызвавшем срабатывание триггера, но его использование необязательно.

Ограничения

Поскольку простые триггеры срабатывают автоматически, без запроса разрешения пользователя, на них распространяется ряд ограничений:

  • Скрипт должен быть привязан к файлу Google Sheets, Slides, Docs или Forms, либо представлять собой надстройку , расширяющую функциональность одного из этих приложений.
  • Они не запускаются, если файл открыт в режиме только для чтения (просмотр или комментирование).
  • Выполнение скриптов и запросы к API не приводят к срабатыванию триггеров. Например, вызов метода Range.setValue() для редактирования ячейки не приводит к срабатыванию триггера onEdit электронной таблицы.
  • Они не могут получить доступ к сервисам, требующим авторизации . Например, простой триггер не может отправить электронное письмо, потому что сервис Gmail требует авторизации, но простой триггер может перевести фразу с помощью анонимного языкового сервиса .
  • Они могут изменять файл, к которому привязаны, но не могут получить доступ к другим файлам, поскольку для этого требуется авторизация.
  • В зависимости от сложного набора ограничений безопасности , они могут определить или не определить личность текущего пользователя.
  • Они не могут бегать дольше 30 секунд.
  • В некоторых случаях дополнения Editor запускают свои простые триггеры onOpen(e) и onEdit(e) в режиме без авторизации, что создает дополнительные сложности. Для получения дополнительной информации см. руководство по жизненному циклу авторизации дополнений .
  • На простые триггеры распространяются ограничения по квоте триггеров в Apps Script.

Эти ограничения не распространяются на doGet(e) или doPost(e) .

onOpen(e)

Триггер onOpen(e) срабатывает автоматически, когда пользователь открывает электронную таблицу, документ, презентацию или форму, на редактирование которых у него есть разрешение. (Триггер не срабатывает при заполнении формы, а только при открытии формы для редактирования.) onOpen(e) чаще всего используется для добавления пользовательских пунктов меню в Google Таблицы, Презентации, Документы или Формы.

triggers/triggers.gs
/**
 * The event handler triggered when opening the spreadsheet.
 * @param {Event} e The onOpen event.
 * @see https://developers.google.com/apps-script/guides/triggers#onopene
 */
function onOpen(e) {
  // Add a custom menu to the spreadsheet.
  SpreadsheetApp.getUi() // Or DocumentApp, SlidesApp, or FormApp.
    .createMenu("Custom Menu")
    .addItem("First item", "menuItem1")
    .addToUi();
}

onInstall(e)

Триггер onInstall(e) срабатывает автоматически, когда пользователь устанавливает надстройку Editor из Google Docs, Sheets, Slides или Forms. Триггер не срабатывает, когда пользователь устанавливает надстройку с веб-сайта Google Workspace Marketplace . Наиболее распространенное использование onInstall(e) — это вызов onOpen(e) для добавления пользовательских меню. После установки надстройки файл уже открыт, поэтому onOpen(e) не запускается автоматически, если файл не открыт повторно. Обратите внимание, что существуют определенные ограничения на то, что может делать onInstall(e) . Подробнее об авторизации .

triggers/triggers.gs
/**
 * The event handler triggered when installing the add-on.
 * @param {Event} e The onInstall event.
 * @see https://developers.google.com/apps-script/guides/triggers#oninstalle
 */
function onInstall(e) {
  onOpen(e);
}

onEdit(e)

Триггер onEdit(e) срабатывает автоматически, когда пользователь изменяет значение любой ячейки в электронной таблице. Большинство триггеров onEdit(e) используют информацию из объекта события для соответствующего реагирования. Например, функция onEdit(e) приведенная ниже, устанавливает комментарий к ячейке, который записывает время последнего редактирования.

triggers/triggers.gs
/**
 * The event handler triggered when editing the spreadsheet.
 * @param {Event} e The onEdit event.
 * @see https://developers.google.com/apps-script/guides/triggers#onedite
 */
function onEdit(e) {
  // Set a comment on the edited cell to indicate when it was changed.
  const range = e.range;
  range.setNote(`Last modified: ${new Date()}`);
}

Триггер onEdit() ставит в очередь не более 2 событий.

onSelectionChange(e)

Триггер onSelectionChange(e) срабатывает автоматически, когда пользователь изменяет выделение в электронной таблице. Для активации этого триггера необходимо обновить электронную таблицу после добавления триггера и каждый раз при открытии таблицы.

Если выделение перемещается между несколькими ячейками за короткий промежуток времени, некоторые события изменения выделения могут быть пропущены для уменьшения задержки. Например, если множество изменений выделения происходит в течение двух секунд друг от друга, только первое и последнее изменения выделения активируют триггер onSelectionChange(e) .

В следующем примере, если выбрана пустая ячейка, функция onSelectionChange(e) устанавливает красный фон ячейки.

triggers/triggers.gs
/**
 * The event handler triggered when the selection changes in the spreadsheet.
 * @param {Event} e The onSelectionChange event.
 * @see https://developers.google.com/apps-script/guides/triggers#onselectionchangee
 */
function onSelectionChange(e) {
  // Set background to red if a single empty cell is selected.
  const range = e.range;
  if (
    range.getNumRows() === 1 &&
    range.getNumColumns() === 1 &&
    range.getCell(1, 1).getValue() === ""
  ) {
    range.setBackground("red");
  }
}

doGet(e) и doPost(e)

Триггер doGet(e) срабатывает автоматически, когда пользователь посещает веб-приложение или программа отправляет HTTP GET запрос веб-приложению. doPost(e) срабатывает, когда программа отправляет HTTP POST запрос веб-приложению. Эти триггеры более подробно описаны в руководствах по веб-приложениям , HTML-сервисам и сервисам контента . Обратите внимание, что doGet(e) и doPost(e) не распространяются указанные выше ограничения.

Доступные типы триггеров

Если ограничения на простые триггеры не позволяют им удовлетворить ваши потребности, вместо них может подойти устанавливаемый триггер . В таблице ниже приведено краткое описание типов триггеров, доступных для каждого типа событий. Например, Google Sheets, Slides, Forms и Docs поддерживают простые триггеры открытия, но только Sheets, Docs и Forms поддерживают устанавливаемые триггеры открытия.

Событие Простые триггеры Устанавливаемые триггеры
Открыть
Листы
Слайды
Формы*
Документы

function onOpen(e)

Листы
Формы*
Документы
Редактировать
Листы

function onEdit(e)

Листы
Изменение выбора
Листы

function onSelectionChange(e)

Установить
Листы
Слайды
Формы
Документы

function onInstall(e)

Изменять
Листы
Отправить форму
Листы
Формы
Часы (управляемые временем)
Листы
Слайды
Формы
Документы
Автономный
Получать
Автономный

function doGet(e)

Почта
Автономный

function doPost(e)

* Событие открытия формы в Google Forms происходит не тогда, когда пользователь открывает форму для ответа, а когда редактор открывает форму для внесения в нее изменений.