Как работать с Гугл Таблицей: События
  • Игорь Билецкий
  • 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 в Гугл Таблице для учета

Поддержать сайт! Спасибо!

Сказать спасибо и поддержать сайт

Зарабатывай через интернет

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


ITVDN Many GEO's

Пользуемся и рекомендуем


Monobank [CPS, API] UA


sportbank [CPS] UA


Rozetka UA

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

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