Первая страница

Синхронизация Гугл Таблицы с Гугл Календарем

скрипт, инструкция, инфографика
Онлайн: РИСОВАЛКИ | ИГРЫ | РЕЛАКС программы

Анатолий Опарин / март, 2019

Гугл: Таблицы-Календарь синхронизация

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

Задача: Есть Гугл Таблица с днями рождения партнеров. Надо сделать так, чтобы мы могли автоматически в Гугл Календаре иметь напоминания об этих днях рождения с извещением на электронную почту владельца Календаря, т.е. на наш e-mail.

Решение: 1) Создаем таблицу дней рождения в Гугл Таблицах; 2) Пишем скрипт на языке Google Apps Script, который считывает таблицу и ретранслирует ее строки в Гугл Календарь в виде напоминаний; 3) Рисуем кнопку в интерфейсе Таблиц и задаем ей связь со скриптом; 4) Запускаем скрипт этой кнопкой.

СОЗДАЕМ ТАБЛИЦУ

Создаем таблицу по шаблону: Имя | Фамилия | Дата рождения. Первая строка – заголовок. Именно на такой шаблон рассчитан скрипт ниже. При изменении шаблона потребуется некоторая корректировка скрипта.

ПИШЕМ СКРИПТ

В Таблице с нашим расписанием дней рождения через меню Tools > Script Editor зайти в редактор скриптов. Написать код:

function DR() { // Получаем адреса активных ячеек var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); // Создаем "Личный_Календарь", если его не было var calname = CalendarApp.getCalendarsByName("Личный_Календарь"); if (calname.length > 0) { currentCalendar = calname[0]; var events = currentCalendar.getEvents(new Date(2019,01,01),new Date(2030,01,01)); for (var j = 0; j < events.length; j++) { // Очищаем events[j].deleteEvent(); } } else { // Создаем var currentCalendar = CalendarApp.createCalendar("Личный_Календарь"); } // Создаем события по дате из третьего столбца [C] и доб. email напоминания for (var i = 1; i < data.length; i++) { var event = currentCalendar.createAllDayEventSeries("Сегодня "+data[i][0]+" "+data[i][1]+" празднует день рождения.",data[i][2],CalendarApp.newRecurrence().addYearlyRule()); event.addEmailReminder(0); } }

Сохранить код по кнопке [Save] (изображение дискеты).
Код можно просто методом копирования перенести в редактор.
Некоторые пояснения:

  • В первой строке фигурирует имя функции – DR – его можно изменить на другое. Его нужно запомнить, пригодится ниже.
  • Создается новый календарь с именем «Личный_календарь».
  • Если календарь с таким именем уже был, то он очищается от всех напоминаний с начала 2019 года по 2030 год.
  • Согласно расписанию дней рождения в Таблице на дни, даты которых фигурируют в третьем столбце, в «Личный_Календарь» выставляются напоминания с email-уведомлением.

Желтым в коде подсвечены те участки, которые должны будут подвергнуться ревизии при изменении формата таблицы, заложенного в постановке задачи:

i = 1 Единица соответствует второй строке, т.к. в программировании счет начинается с нуля. Т.е., если у вас заголовок будет занимать две строки, то 1 надо будет заменить на 2. data[i][0] Это имя. data[i][1] Это фамилия. data[i][2] Это дата рождения. Т.е., если вы изменяете формат и вводите вторым столбцом отчество, сдвигая фамилию и дату вправо, то в коде на месте data[i][2] должно стоять data[i][3], а отчество в виде data[i][1] вставьте после имени, а именно data[i][0] замените на data[i][0]+” ”+data[i][1]. И прежнюю переменную data[i][1], отвечавшую за фамилию, измените на data[i][2].

Таким образом, актуализировать расписание Календаря можно в любое время нажатием на кнопку [ДР]. Прежнее содержание календаря «Личный_Календарь» будет полностью заменяться на расписание, которое присутствует в Таблице.

РИСУЕМ КНОПКУ ДЛЯ СКРИПТА

Для запуска скрипта из интерфейса Таблицы в ней создадим кнопку:

  1. В меню выбрать: Insert > Drawing.
  2. Выбрать инструмент Shape.
  3. Нарисовать фигуру, которая вам нравится. Можно задать на фигуре текст, например, "ДР".
  4. Сохранить по кнопке [Save and Close].
  5. В Таблице на появившейся кнопке нажать на три вертикальные точки – это меню кнопки.
  6. Выбрать пункт Assign Script...
  7. Выбрать имя функции "DR" (без кавычек и без скобок)
  8. Сохранить [Ok].

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

ЗАПУСКАЕМ СКРИПТ

  1. Нажать на созданную кнопку [ДР].
  2. Если это первый запуск, то Google запросит разрешение на выполнения скрипта. Дать это согласие.
  3. После выполнения скрипта зайти в Google Календарь.
  4. Увидеть слева "Личный_Календарь" в списке календарей. Но назначенных событий пока не видно в ячейках дней.
  5. Переключить галочку "Личный_Календарь" в списке календарей. События появятся.
P.S. Можно также вместо кнопки вынести запуск функции скрипта в верхнее меню.

ИНФОГРАФИКА

Специально для визуалов ниже изображено то, что написано выше:

Гугл: Таблицы-Календарь синхронизация: Инфографика

ВАРИАНТЫ ВЫЗОВА ФУНКЦИИ

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

1) Кнопка. Вариант создания кнопки и назначение её на вызов функции описан выше. 2) Постоянное меню. В примере используется в функции onOpen(e), которая автоматически запускается сама при загрузке таблицы: function onOpen(e) { // Это меню добавляется в главное верхнее меню при загрузке документа автоматически SpreadsheetApp.getUi() .createMenu('Моё меню') .addItem('Дни Рождения', 'DR') .addSeparator() .addItem('Имя_пункта_меню_1', 'имя_функции_1') .addItem('Имя_пункта_меню_2', 'имя_функции_2') // .addSubMenu(SpreadsheetApp.getUi().createMenu('My Submenu') // Это подменю // .addItem('One Submenu Item', 'mySecondFunction') // .addItem('Another Submenu Item', 'myThirdFunction')) .addToUi(); } 3) Меню, создаваемое кнопкой. Функцию menu() из примера ниже надо привязать к какой-нибудь кнопке: function menu() { // Это меню добавляется в главное верхнее меню по кнопке и после перезагрузки документа пропадает var ss = SpreadsheetApp.getActiveSpreadsheet(); var entries = [ {name: "ДниРожд", functionName: "DR"} ]; ss.addMenu("Мои функции", entries); // entries.push(null); // line separator // entries.push({name: "Menu Entry 2", functionName: "function2"}); // Browser.msgBox("Сделано?"); } 4) Страница скрипта. На панели инструментов выбрать функцию по кнопке [Select Function] и нажать кнопку ▶.

Для погружения в тему Google Apps Script см. https://developers.google.com/apps-script/reference/


Ещё статьи для офисных работников, расширяющие их навыки:
Памятка по информационной безопасности
Как организовать локальное хранилище писем в MS Outlook
Использование фильтров в MS Excel
Работа с датой и временем в MS Excel
Что можно сделать с дублями строк в MS Excel
Функция ВПР в MS Excel
Функция СУММЕСЛИ в MS Excel
Функции ПОИСКПОЗ и ИНДЕКС в MS Excel
oXygen XML Editor - быстрый старт
QGIS - быстрый старт
Camunda Modeler - приложение для моделирования бизнес-процессов
Новости
Творческой личности
домой | живопись | графика | компьютерная графика | поделки | юные художники | темы | комментарии | перлы
конкурсы | игры | релакс | рисовалки | учиться рисовать | детские карты Москвы | детские стихи | статьи | видео | поиск | обратная связь