こんにちは!GMOアドパートナーズで社内システムサポート担当をしているK.Tです。
今回、Googleカレンダーの予定を一括出力する方法について調査しました。
<きっかけ>
国内産グループウェアのカレンダーでは大体備わっている「予定の一括CSV出力」機能。
Googleカレンダーでは簡易的にCSV形式で出力する機能が備わっていない・・・
Googleで提供されているエクスポート機能でiCal形式で出力して、Outlookやらにインポートして、
CSV出力するなんてやり方もあるようですが、ほかの人の予定出力ができません。
何より手順が多いので、この方法は断念。
行動分析や会議室などの設備稼働状況確認なんかで利用するため、CSV形式でほしかったので、
なんとかしようと思い立ちました!
<やりたい事>
- 期間指定で特定メンバーまたは会議設備(リソース)の予定をCSV形式出力
Google Apps Scriptsを使って、Googleカレンダーイベントをスプレッドシートへ出力してみます。
こちらのリファレンスを参考にしました。
https://developers.google.com/apps-script/reference/calendar/
<カレンダーの取得とイベント出力>
Googleカレンダーでは、1ユーザや1設備のカレンダーを、Calendarオブジェクトとして扱います。
CalendarAppクラスで、Calendarオブジェクトの取得メソッドが用意されています。
IDを指定してCalendarオブジェクトを取得したりと、いくつかメソッドが用意されていますが、
今回はgetAllCalendarsメソッドを使いました。
このメソッドは、自身が保有しているすべてのユーザや設備のCalendarオブジェクトをArrayで返してきてくれます。
1 |
var calendars = CalendarApp.getAllCalendars(); |
このメソッドで取れるのはこの赤枠部分のカレンダーになります。
ほしいCalendarオブジェクトを一気に取得してくれるので、
あとは、取得したCalendarオブジェクト毎にイベントをスプレッドシートへ出力するだけ!
CalendarクラスのgetEventsメソッドで、期間指定して、イベントを出力します。
シートへの書き出しは、最終行にイベントを追加するようにappendRowを使いました。
スクリプトの全容は、以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* 指定期間のイベントを取得する */ function getEvents() { var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var no=1; //No //期間を指定する var startDate=new Date('2019/08/01 00:00:00'); //取得開始日 var endDate=new Date('2019/09/01 00:00:00'); //取得終了日 //アカウントに紐付けられているすべてのカレンダーを取得 var calendars = CalendarApp.getAllCalendars(); for (var i in calendars) { //対象オブジェクト毎の指定期間内の予定を取得 var myEvents=calendars[i].getEvents(startDate,endDate); // カレンダー毎のイベントを繰り返し最終行に追加 for each(var evt in myEvents){ mySheet.appendRow( [ no, //No calendars[i].getName(), evt.getTitle(), //イベントタイトル evt.getStartTime(), //イベントの開始時刻 evt.getEndTime(), //イベントの終了時刻 evt.getLocation(), //イベントの終了時刻 evt.getCreators()[0] //イベントの登録者名 ] ); no++; } } } |
出力結果は、こんな感じです。
いい感じで取得できました!
(1行目の見出しは、事前に自分で書いておきました)
<まとめ>
カレンダーオブジェクトの概念をつかむのに、少し時間を要しました。
「一括エクスポートの機能がデフォルトで、備わっていない」なんて嘆いてましたが、
自分で作れってことですね!