GASでカレンダーの予定をスプレッドシートに出力する方法とは?

GASを使ってカレンダーの予定をスプレッドシートに出力したいんですが、どうすればいいんでしょうか?全然分からなくて…
猫男
猫男
catman
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列に変更しているな。