Как работать с Гугл Таблицей: События
  • Ігор Білецький
  • 20.11.2021
  • Коментарі відсутні

Использование событий в Google Sheets — мощный инструмент, который может сильно облегчить вам жизнь, как разработчику.

В данной статье попробуем разобраться, что же такое события гугл таблицы и как их можно использовать.

К примеру, если вы открываете таблицу — возникает событие «Открытие таблицы». Если «повесить» на событие запуск функции, то каждый раз при открытии таблицы будет запускаться ваша функция.

Разберемся подробнее.

Какие бывают события в гугл таблице и как их использовать

События можно отследить либо непосредственно из скрипта либо с помощью специального триггера.

Из скрипта можно отследить события «редактирование» и «открытие таблицы». Для этого используются функции с четко прописанным именем.

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

Использование триггеров позволяет дополнительно к описанным событиям запустить свою функцию после получения новых данных из связанной гугл формы.

Также с помощью триггера можно создать событие по времени — к примеру, запуск определенной функции каждый день в одно и то же время,  или использовать мероприятия из гугл календаря.

Помимо количества отслеживаемых событий, использование триггеров имеет еще ряд отличий от использования аналогичных функций в скрипте. Но об этом позже.

Для начала разберем использование событий из самого кода.

Как я писал выше, из кода мы можем отследить событие открытия нашей таблицы либо редактирования данных. Разберем все на примере простого скрипта.

Редактирование

function onEdit(e) {
  let editCell = e.range;
  let newVal = editCell.getValue();
  SpreadsheetApp.getUi().alert(newVal);
}

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

Однако, на практике я использую данную функцию немного по-другому.

function onEdit() {
  //обработка события редактирования
  let editSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //лист, где произошло редактирование
  let sheetName = editSheet.getSheetName() // Получаем имя листа
  let editCell = editSheet.getActiveCell(); //получаем ячейку, которая редактировалась
}

В таком варианте я вначале определяю где именно произошло редактирование и если нужные условия совпадают, запускаю свой обработчик события.

Пояснение. К примеру, у меня на одном из листов есть ячейка с чекбоксом. Мне необходимо по клику на этом чекбоксе выполнить некоторые действия в зависимости от того, был чекбокс нажат или отпущен.

При редактировании данных на остальных листах ничего запускать не нужно.

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

Если и здесь был клик на нужной мне ячейке, то тогда в зависимости от полученного в результате значения чекбокса, я выполняю нужные действия.

Значение чекбокса я могу получить с помощью editCell.getValue();

Открытие таблицы

function onOpen() {
//функции, которые запускаются при открытии книги
  createMenu();
  createServiceMenu();
}

Здесь вообще все предельно просто. При открытии таблицы срабатывает функция «onOpen«, которая в свою очередь запускает нужные нам функции. В нашем примере создаются меню с помощью функций createMenu и createServiceMenu.

Как создать свое меню, описано здесь.

Использование триггеров 

Триггеры — очень мощный инструмент, который существенно расширяет возможности гугл таблиц. Рассмотрим их использование. Я поделюсь тем, как сам использовал триггеры в проектах.

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

Как создать триггер в ручном режиме, описано ЗДЕСЬ.

Если вам необходимо создать триггер с помощью скрипта, то вам СЮДА.

❗ В заключении приведу один момент, который иногда определяет, как обрабатывать событие — с помощью триггера или специальной функции.

Речь идет о разграничении доступа к данным вашей таблицы. Дело в том, что скрипт (ваша функция) запускается всегда от вашего имени (того, кто в данный момент работает с таблицей), а триггер запускает нужную функцию от имени того, кто создал триггер.

Теперь обо всем по порядку.

К примеру есть таблица, с которой работают несколько пользователей. В таблице есть данные, которые можно только просматривать. Как вариант реализации (было в одном из проектов), есть защищенный лист. Его все, у кого есть доступ к таблице, могут просматривать, а редактировать — только владелец (либо определенные пользователи).

💻 Приведу пример реальной задачи, что пришлось решать в одном из проектов.

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

Проблема в том, что доступ к основному листу у менеджера только на чтение. Соответственно, он не сможет отправить на защищенный лист проверенную информацию ни в ручном режиме, ни с помощью функции.

👇 Решение

От имени администратора создается триггер, срабатывающий на редактирование. После проверки введенных данных менеджер кликает на специальный чекбокс.

Срабатывает триггер на событие «редактирование» и запускает нужную функцию от имени того, кто создал этот триггер — в нашем случае от имени администратора.

А так как администратор имеет полный доступ к листам, функция без проблем внесет данные на защищенный лист.

На этом пока все. Надеюсь информация была полезной.

Также рекомендую обзорную статью с различными решениями, скриптами и прочими полезностями при работе с гугл таблицами.

Кстати, если наш сайт принес вам пользу и вы хотите сказать нам «Спасибо» и поддержать нас 🙏, то это можно сделать ЗДЕСЬ.

 

Рекомендую почитать:

 

Залишити коментар

Есть клиенты? Используйте CRM в Гугл Таблице для учета

Підтримати сайт! Дякуємо!

Подякувати і подтримати сайт

Заробляй через інтернет

Доход через интернет: биржи фриланса и удаленной работы

Футажі для відео ютуб

Футажі для ютуба