LoginSignup
27
23

More than 5 years have passed since last update.

Googleカレンダーの予定をGASでスプレッドシートに取り込む

Posted at

ゴール

実現したいのは、
Screen Shot 2017-09-23 at 23.52.46.png
こんな感じの予定(架空)を取り込んで、

Screen Shot 2017-09-23 at 23.59.15.png
こんな感じに表示することです。

やり方

カレンダーのIDが分かれば非常に簡単に取り込む事ができます。
カレンダーのID?となる方はGoogleで検索すればいろんなサイトで教えてくれているのでご参照ください。

calendar.gs
//関数名は適当に
function obtainCalendarData() {
  //IDを指定してカレンダーを取得
  var calendar = CalendarApp.getCalendarById('ここにカレンダーのIDを指定する');

  //対象の日付を範囲指定(今回は対象となる1週間分を指定)して予定を取得
  var events = calendar.getEvents(new Date('2017/10/01'), new Date('2017/10/07'));

  //アクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSheet();

  //各行のタイトルを指定
  sheet.getRange('A'+(1)).setValue('イベント名')
  sheet.getRange('B'+(1)).setValue('開始時刻')
  sheet.getRange('C'+(1)).setValue('終了時刻')
  sheet.getRange('D'+(1)).setValue('所要時間')

  //繰り返す回数は予定の個数分(列を指定するためにforEachは使わない)
  for (var i=0; i < events.length; i++) {
    var title = events[i].getTitle();
    var startTime = events[i].getStartTime()     
    var endTime = events[i].getEndTime()
    //単位の変換も同時に
    var duration = (endTime - startTime) / (1000 * 60 * 60)

    //iが0から始まることとタイトル分を考慮して +2している
    sheet.getRange('A'+(i+2)).setValue(title);
    sheet.getRange('B'+(i+2)).setValue(startTime);
    sheet.getRange('C'+(i+2)).setValue(endTime);
    sheet.getRange('D'+(i+2)).setValue(duration + 'h');
  }
}

各コードの動きはコメントに書いた通りです。
実行すればスプレッドシートに上記の通りに出力されます。
初めて実行する際には下のようなポップアップが出ますが、個人の範囲であれば気にせず許可してあげましょう。

Screen Shot 2017-09-23 at 23.54.18.png
※ポップアップ内の「10月予定管理」はGASのプロジェクト名です。

まとめ

自分でもまだほとんど使いこなせていないGASですが、非常に簡単に扱える事がわかりました。
今回はただカレンダーの予定を取得しただけですが、内容を工夫すればかなり応用ができそうです。

27
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
23