Повысьте продуктивность с помощью кода! Узнайте, как подключить Таблицы к Календарю с помощью скрипта приложений для автоматизации расписания.
Введение
Google Apps Script - это инструмент создания сценариев, который позволяет связать все ваши приложения Google из одного места с помощью кода JavaScript. Среда разработки (доступная на script.googgle.com) предоставляет несколько высокоуровневых интерфейсов программирования приложений (API), которые позволяют вам взаимодействовать с вашими любимыми приложениями Google (создавать, изменять документы, читать и писать таблицы, создавать события календаря и т. Д. ).
Сегодня я покажу, как написать простой скрипт, который позволит вам связать события, организованные в электронную таблицу, и связать их с вашим личным или общим календарем.
Мотивация
На работе я не часто использую электронные таблицы Google, но считаю их очень полезными для управления моей личной деятельностью, например расходами, поездками или расписанием учебы. Сегодня я связался со старым другом, и мы решили возобновить нашу старую привычку смотреть фильмы каждую пятницу, хотя и удаленно из-за нынешней пандемии. Я быстро создал электронную таблицу Google Sheet, чтобы мы могли перечислять фильмы, которые будем смотреть каждую неделю.
Когда моя вкладка была создана и у меня появился список фильмов для просмотра и набор дат, я подумал: Разве не было бы неплохо иметь возможность синхронизировать эту таблицу с моим календарем? Быстрый поиск в Google Обзор привел меня к сообщению в блоге защитника разработчиков G Suite Джоанны Смит. В этом коротком посте и прилагаемом к нему видео на YouTube рассказывается, как точно решить эту задачу с помощью Google Apps Script. К разочарованию многих комментаторов YouTube видео, фрагмент кода для задачи нигде недоступен для быстрого копирования, вставки и работы.
К счастью, код довольно тривиален, и мы покажем, как легко его улучшить, добавив несколько дополнительных строк кода.
Процесс
Таблица
Я предполагаю, что вы знаете, как создать электронную таблицу с помощью Google Sheets, и, конечно, если вы хотите воспроизвести эту работу, вам понадобится учетная запись Google. Моя таблица выглядит так:
Как видите, некоторые записи отсутствуют, поскольку мы еще не решили, какие фильмы мы будем смотреть дальше. Кроме того, обратите внимание, что столбец DATE имеет формат Дата и время, это предпочтительнее, так как позже он упростит код (обработка дат в программировании немного затруднительна). Чтобы изменить формат ячеек, выберите ячейки даты и нажмите Формат ›Число› Дата и время.
Календарь
Для этого я создал новый календарь в Google Calendar и получил его идентификатор календаря, выполнив следующие простые шаги:
Нам понадобится идентификатор календаря позже, когда мы будем писать скрипт, чтобы код знал, какой календарь нужно изменить. После того, как вы скопировали идентификатор календаря, вставьте его в пустую ячейку в своей электронной таблице, чтобы мы могли автоматически получить календарь из электронной таблицы. В качестве альтернативы вы можете просто сохранить идентификатор календаря в переменной в нашем коде JavaScript.
Кодекс - шаг за шагом
В этом руководстве предполагается, что вы в некоторой степени знакомы с программированием и, в идеале, с объектно-ориентированным программированием, хотя код можно почти читать как обычный английский. Кроме того, код полностью прокомментирован.
Теперь, когда все готово, вернитесь к электронной таблице и нажмите Инструменты ›Редактор скриптов. Теперь мы готовы писать код, но мы находимся перед пустым холстом с именем Code.gs
, который содержит пустой шаблон для функции с именем myFunction()
. Поскольку код не объясняется подробно в Руководстве по G Suite, мы разберем его здесь (и не волнуйтесь, весь код будет доступен в конце этой публикации).
Сначала мы настраиваем нашу электронную таблицу и календарь:
Я вызвал свою функцию sheet2calendar
. Строка 4 в приведенном выше блоке устанавливает переменную spreadsheet
для электронной таблицы, в которой находится наше расписание, в этом случае мой лист называется CALENDARIO. Строка 5 извлекает идентификатор календаря из ячейки H1, и, наконец, я загружаю объект calendar
в строку 6.
Затем мы загружаем наши фильмы этой единственной строкой:
Это просто говорит о загрузке записей из ячейки A4 в ячейку B15, эффективно извлекая таблицу 12x2. Первый столбец соответствует датам, а второй столбец - названиям фильмов.
Теперь мы собираемся перебрать каждую запись в этой таблице (FOR LOOP!) И создать календарное событие для указанной даты. Каждое мероприятие будет длиться 3 часа, а название мероприятия будет названием фильма. Кроме того, мы реализуем несколько функций, которые не обсуждались в блоге G Suite:
- Если название фильма недоступно, мы пропустим эту запись и не создадим никаких событий.
- Если в этот временной интервал есть запись (в нашем новом Календаре, который работает независимо от других наших календарей), удалите это событие и создайте новое - многие из вас могут не согласиться с таким способом разрешения конфликтов, хотя это всего лишь доказательство концепции!
- Добавьте функциональность, чтобы делиться событиями с гостями, указав их адреса электронной почты.
- Оберните код для создания и публикации события в автономной функции.
Наш основной цикл for будет выглядеть так:
Хороший! У нас есть почти все необходимое, теперь давайте добавим наши новые функции. Во-первых, мы пропустим текущую итерацию, если переменная movie
пуста (т.е. равна ''
). Далее нам понадобится наш код обработки конфликтов. Для этого мы извлечем существующие события между временем начала и окончания нашего фильма и удалим события, для которых текущее имя отличается от нового имени.
Логика обработки конфликта проста: если длина объекта conflicts
равна 0, конфликта нет, и мы можем спокойно создать новое событие. Если длина объекта conflicts
больше 0, мы перебираем события в пределах conflicts
(в случае, если их больше одного). Затем мы сравниваем имя конфликтующего события с именем movie
, если они оба равны, мы пропускаем текущую итерацию (нет необходимости удалять событие и создавать событие с тем же именем). Однако, если названия различаются, мы переходим к удалению конфликтующего события и созданию нового события.
В предыдущем блоке кода мы дважды вызываем функцию createAndShare()
(в строках 13 и 31). Я оставил эту функцию внешней по отношению к функции sheet2calendar()
, чтобы избежать повторного написания кода и для наглядности. Вот его реализация:
Последние штрихи - из сообщения Джоанны
Наконец, чтобы избежать необходимости обращаться к редактору скриптов каждый раз, когда мы хотим синхронизировать наш календарь с нашей электронной таблицей, мы можем добавить кнопку на нашу панель инструментов Таблиц, как показано в сообщении Джоанны Смит от 2018 ». Вам просто нужно добавить эту функцию в ваш .gs
файл:
После этого вы должны увидеть такой значок на панели инструментов вашей электронной таблицы:
Это просто!
Результат
Когда мы нажимаем Синхронизировать сейчас или запускаем код из редактора сценариев, мы успешно получаем отображение наших событий, и гость должен получать приглашения по электронной почте.
Окончательный код
Вы могли бы сделать больше
В качестве передового опыта и если вы используете это для серьезного проекта, я рекомендую использовать функцию App Scripts Logger.log()
для регистрации всех операций, выполняемых вашим кодом. Таким образом, вы всегда можете вернуться к журналу и посмотреть, какие изменения были внесены и какой код / действия были выполнены. Подробнее о классе Logger
читайте в официальной документации.
Кроме того, вы можете подумать, что мой код слишком сложен для поставленной задачи и что я мог бы избежать реализации определенных функций. Я считаю, что всегда стараться писать код, соответствующий лучшим практикам, даже в игрушечных проектах.
Вывод
Надеюсь, вы нашли этот пост стоящим к прочтению. Я лично считаю этот инструмент очень полезным и простым в использовании, а его возможности кажутся безграничными.
Ресурсы
- Обзор скриптов Google Apps
- Добавить расписание из Google Таблиц в Календарь Сообщение в блоге G Suite (теперь Google Workspace)
- Запуск скрипта приложения Google Таблиц одним нажатием кнопки, автор: Джоанна Смит