Иногда возникает необходимость показать все записи календаря за промежуток времени в распечатанном виде и в гугл календаре конечно же есть кнопка распечатать, но представление не всегда удобное и доступно только несколько стандартных настроек.
Однако, если скопировать все записи из календаря в гугл таблицу, то их можно легко отформатировать и даже провести аналитику, если это надо. А данные календаря останутся неизменными.
Самый простой способ перенести все записи из выбранного гугл календаря в таблицу - воспользоваться Google Apps Script.
TL;DR
// https://habr.com/ru/articles/811171/
// Михаил Шардин https://shardin.name/
//
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:
Откройте Google Диск. Перейдите на Google Диск и войдите в свою учетную запись Google.
Создайте новую таблицу. Нажмите кнопку «+ Новый» в верхнем левом углу. В раскрывающемся меню выберите «Google Таблицы».
Откройте редактор сценариев:
– Открыв новую таблицу, перейдите в меню «Расширения».
– В раскрывающемся списке выберите «Apps Script».Вставьте сценарий определения идентификатора нужного календаря:
// https://habr.com/ru/articles/811171/
// Михаил Шардин https://shardin.name/
//
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/
// Михаил Шардин https://shardin.name/
//
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
теперь можно запустить вручную из редактора скриптов. Для этого:
Откройте Google Таблицу.
Нажмите «Расширения» в строке меню.
В раскрывающемся меню выберите «Apps Script». Откроется редактор сценариев.
В редакторе скриптов выберите функцию
eventstospreadsheet
, которую надо запустить, из раскрывающегося списка рядом с кнопкой воспроизведения (▶️).Нажмите кнопку воспроизведения (▶️), чтобы запустить выбранную функцию.
Итоги
В статье представлен код Google Apps Script, который использует сервисы Google Календаря и Google Таблиц для экспорта событий из календаря в таблицу. С помощью кода можно перенести все записи из выбранного гугл календаря в таблицу менее чем за минуту, а затем отформатировать удобным для себя образом или провести аналитику.
Автор: Михаил Шардин,
30 апреля 2024 г.