Использование событий в 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.
Как создать свое меню, описано здесь.
Использование триггеров
Триггеры — очень мощный инструмент, который существенно расширяет возможности гугл таблиц. Рассмотрим их использование. Я поделюсь тем, как сам использовал триггеры в проектах.
Триггер можно создавать либо в ручном режиме, либо с помощью скрипта. Все зависит от поставленной задачи. В любом случае, при создании триггера вы указываете, когда (на какое событие) он должен срабатывать и какую функцию запускать при этом.
Как создать триггер в ручном режиме, описано ЗДЕСЬ.
Если вам необходимо создать триггер с помощью скрипта, то вам СЮДА.
❗ В заключении приведу один момент, который иногда определяет, как обрабатывать событие — с помощью триггера или специальной функции.
Речь идет о разграничении доступа к данным вашей таблицы. Дело в том, что скрипт (ваша функция) запускается всегда от вашего имени (того, кто в данный момент работает с таблицей), а триггер запускает нужную функцию от имени того, кто создал триггер.
Теперь обо всем по порядку.
К примеру есть таблица, с которой работают несколько пользователей. В таблице есть данные, которые можно только просматривать. Как вариант реализации (было в одном из проектов), есть защищенный лист. Его все, у кого есть доступ к таблице, могут просматривать, а редактировать — только владелец (либо определенные пользователи).
💻 Приведу пример реальной задачи, что пришлось решать в одном из проектов.
Есть таблица, которую заполняют менеджеры с помощью гугл формы. Данные после гугл формы обрабатываются скриптом и попадают на промежуточный лист. Менеджер должен проверить правильность данных и отправить их на основной лист.
Проблема в том, что доступ к основному листу у менеджера только на чтение. Соответственно, он не сможет отправить на защищенный лист проверенную информацию ни в ручном режиме, ни с помощью функции.
👇 Решение
От имени администратора создается триггер, срабатывающий на редактирование. После проверки введенных данных менеджер кликает на специальный чекбокс.
Срабатывает триггер на событие «редактирование» и запускает нужную функцию от имени того, кто создал этот триггер — в нашем случае от имени администратора.
А так как администратор имеет полный доступ к листам, функция без проблем внесет данные на защищенный лист.
На этом пока все. Надеюсь информация была полезной.
Также рекомендую обзорную статью с различными решениями, скриптами и прочими полезностями при работе с гугл таблицами.
Рекомендую почитать:
- «Бесплатная мультиссылка за 5 минут для Инстаграм, Тик Ток и др»
- «Доход на партнерских/реферальных программах: примеры и полезные советы»
- «Доход на фрилансе: бесплатное размещение портфолио, объявлений об услугах»