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

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

Самый простой способ перенести все записи из выбранного гугл календаря в таблицу - воспользоваться Google Apps Script.

TL;DR
// https://habr.com/ru/articles/811171/

function eventstospreadsheet() {
    //var cal = CalendarApp.getDefaultCalendar()
    var cal = CalendarApp.getCalendarById('XXXXXXXX@group.calendar.google.com')
    var sheet = SpreadsheetApp.getActiveSheet()
    var values = [
        ["№ п/п", "Дата", "Имя", "Адрес", "Описание"]
    ]

    var events = cal.getEvents(new Date("1 January 1998"), new Date())

    for (var i = 0; i < events.length; i++) {
        values.push([i + 1, events[i].getStartTime(), events[i].getTitle(), events[i].getLocation(), events[i].getDescription()]) //.substring(0, 500)
    }

    Logger.log( JSON.stringify(values) )

    sheet.getRange("A1:E" + values.length).setValues(values)
}

1. Определяем идентификатор нужного календаря

Сначала надо найти идентификатор нужного календаря, потому что их может быть несколько - для этого создаём пустую гугл таблицу и вставляем в неё код скрипта Google Apps Script:

  1. Откройте Google Диск. Перейдите на Google Диск и войдите в свою учетную запись Google.

  2. Создайте новую таблицу. Нажмите кнопку «+ Новый» в верхнем левом углу. В раскрывающемся меню выберите «Google Таблицы».

  3. Откройте редактор сценариев:
    – Открыв новую таблицу, перейдите в меню «Расширения».
    – В раскрывающемся списке выберите «Apps Script».

  4. Вставьте сценарий определения идентификатора нужного календаря:

// https://habr.com/ru/articles/811171/

function getCalendars() { //получить список идентификаторов всех доступных календарей
    var calendars = CalendarApp.getAllCalendars();
    Logger.log('Этот пользователь подписан на %s календарей:', calendars.length);
    for (var i = 0; i < calendars.length; i++) {
        var calendar = calendars[i];
        Logger.log((i + 1) + 'й календарь: "' + calendar.getName() + '",\n ID: "' + calendar.getId() + '"\n');
    }
}

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

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

После запуска скрипта вы сможете узнать подписки на все свои календари и нужный идентификатор:

Поиск идентификатора календаря
Поиск идентификатора календаря

Идентификатор нужного календаря выглядит примерно вот так (на скриншоте не показан):
dnsk4qaa0bt4zax029hyogwj78ft@group.calendar.google.com

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

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

Идентификатор указанный в коде XXXXXXXX@group.calendar.google.com, необходимо заменить на ваш собственный, найденный на предыдущем шаге. И дату 1 January 1998 можно заменить на любую другую дату начала поиска событий в календаре.

// https://habr.com/ru/articles/811171/

function eventstospreadsheet() {
    //var cal = CalendarApp.getDefaultCalendar()
    var cal = CalendarApp.getCalendarById('XXXXXXXX@group.calendar.google.com')
    var sheet = SpreadsheetApp.getActiveSheet()
    var values = [
        ["№ п/п", "Дата", "Имя", "Адрес", "Описание"]
    ]

    var events = cal.getEvents(new Date("1 January 1998"), new Date())

    for (var i = 0; i < events.length; i++) {
        values.push([i + 1, events[i].getStartTime(), events[i].getTitle(), events[i].getLocation(), events[i].getDescription()]) //.substring(0, 500)
    }

    Logger.log( JSON.stringify(values) )

    sheet.getRange("A1:E" + values.length).setValues(values)
}

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

3. Переносим все записи из выбранного гугл календаря в гугл таблицу менее чем за минуту

Функцию eventstospreadsheet теперь можно запустить вручную из редактора скриптов. Для этого:

  1. Откройте Google Таблицу.

  2. Нажмите «Расширения» в строке меню.

  3. В раскрывающемся меню выберите «Apps Script». Откроется редактор сценариев.

  4. В редакторе скриптов выберите функцию eventstospreadsheet , которую надо запустить, из раскрывающегося списка рядом с кнопкой воспроизведения (▶️).

  5. Нажмите кнопку воспроизведения (▶️), чтобы запустить выбранную функцию.

Результат считывания данных из календаря и создания копии в гугл таблице
Результат считывания данных из календаря и создания копии в гугл таблице

Итоги

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

Автор: Михаил Шардин,

30 апреля 2024 г.

Комментарии (0)