GASでカレンダーの予定をスプレッドシートに出力する方法とは?
GASを使ってカレンダーの予定をスプレッドシートに出力したいんですが、どうすればいいんでしょうか?全然分からなくて…

猫男

catman
それなら、catmanが「GASでカレンダーの予定をスプレッドシートに出力する方法」を教えよう。まずは基本を抑える必要があるさ。
GASでカレンダーの予定をスプレッドシートに出力する方法
以下の2ステップを踏んでみよう。
1. GASでカレンダーの予定を取得する
CalendarAppクラスを使えば、簡単に特定のカレンダーの予定を取得できる。以下はその基本的な方法だ。
function getCalendarEvents() {
var calendar = CalendarApp.getCalendarById('your-calendar-id@example.com');
var events = calendar.getEvents(new Date('2023-01-01T00:00:00Z'), new Date('2023-12-31T23:59:59Z'));
for (var i = 0; i < events.length; i++) {
Logger.log(events[i].getTitle());
}
}
このスクリプトでは、特定のカレンダーIDを使ってそのカレンダーの予定を1年間取得し、それぞれの予定のタイトルをログに出力している。CalendarApp.getCalendarById() は特定のカレンダーを取得するためのメソッドだ。
2.スプレッドシートにカレンダーの予定を出力する
次に、取得した予定をスプレッドシートに移すぞ。
GASではSpreadsheetAppを使ってスプレッドシートへのアクセスが可能だ。
function exportEventsToSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var calendar = CalendarApp.getCalendarById('your-calendar-id@example.com');
var events = calendar.getEvents(new Date('2023-01-01T00:00:00Z'), new Date('2023-12-31T23:59:59Z'));
var cells = [];
for (var i = 0; i < events.length; i++) {
var title = events[i].getTitle();
var startTime = events[i].getStartTime();
cells.push([title, startTime]);
}
sheet.getRange(1, 1, cells.length, 2).setValues(cells);
}
このスクリプトでは、取得した全ての予定をスプレッドシートの ‘Sheet1’ に出力している。getSheetByName() メソッドは特定のシートを取得してくれる。
練習問題
- 以下のスクリプトを変更して、カレンダーのイベント終了時間もスプレッドシートに出力するようにしてみよう。
- 出力されたスプレッドシートの各行には、タイトル、開始時間、終了時間が含まれるようにする。
練習問題解答・解説
function exportFullEventDetailsToSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var calendar = CalendarApp.getCalendarById('your-calendar-id@example.com');
var events = calendar.getEvents(new Date('2023-01-01T00:00:00Z'), new Date('2023-12-31T23:59:59Z'));
var cells = [];
for (var i = 0; i < events.length; i++) {
var title = events[i].getTitle();
var startTime = events[i].getStartTime();
var endTime = events[i].getEndTime();
cells.push([title, startTime, endTime]);
}
sheet.getRange(1, 1, cells.length, 3).setValues(cells);
}
このスクリプトでは、各イベントの終了時間も取得して ‘cells’ 配列に追加している。
メソッド getEndTime() を使えば、イベントの終了時間を取得できる。
sheet.getRange(1, 1, cells.length, 3) では、データを出力する範囲を3列に変更しているな。