Googleカレンダーの予定をデータ形式(スプレッドシート)にするGAS(プログラム)

Googleカレンダーに登録している予定を、データ形式にする方法をまとめてみました。
Google Apps Script=GAS(ガス)というプログラムを使います。

Screenshot_5

Google カレンダーのメリットはデータを蓄積できること

10年以上 Google カレンダーを使っています。
紙の手帳は使っていません。
紙の手帳のよさもありますが Google からのメリットはデータとして蓄積し、活用できることです。
たとえば去年の今頃は何をやってたんだろうとか、5年前どうだったかを比べてみたりもしています 。
(今よりも予定がぎっしり詰まっています)

予定を多ければいいわけではなく、減らす方向で工夫をしてきましたので、デジタルで過去の予定をさっと見ることができるGoogle カレンダーは便利なのです。

声でカレンダーの予定を入力することもできます。
Googleカレンダーに、予定を声で登録する方法 | EX-IT

パソコンやスマホをどの端末を使ってでもどこでも予定を確認できるのも便利で、手元に手帳がないので予定がわからないということは一切ありません。

Google カレンダーからその予定をデータ形式で一覧にすることもできます。
Screenshot_4
私の場合、こういったデータをタスク管理のExcelに移行することに使うのがメインです。
過去1年間の予定や特定月のデータを取り出すこともできますので、いろんな使い方ができるでしょう。(税理士の場合、業務処理簿とやらの基礎データにも)

image

こういうデータ活用をするには、Googleカレンダーのデータをメンテナンスしておかなければいけません。
仮の予定だったら消す、時刻が変わったら変更しておくといったメンテナンスです。
そうしないとデータとして使えません。

GAS で Google カレンダーのデータを取り出す方法

Googleカレンダーからデータを取り出すには 、Google カレンダーと同じくGoogleのプログラミングツール、GoogleAppsScript=GAS(ガス)を使います 。

流れとしては次のとおりです。
1 スプレッドシートを読み込む
2 カレンダーをIDで読み込む
3 カレンダーのイベントの期間を指定
4 イベントをスプレッドシートへ書き出す

1つずつ見ていきます。

スプレッドシートとは同じくGoogleが提供するExcelのようなものです。
このスプレッドシートを開き、[ツール]→[スクリプトエディタ]を選んで、そこにGAS=プログラムを書いていきます。
GASの使い方についてはこちらの記事を参考にしてください。
プログラミングやるならExcelマクロ(VBA)?Googleスプレッドシート(GAS)?それぞれのはじめ方と最初の一歩 | EX-IT

function callender() {

//1 スプレッドシートを読み込む
  var sp =SpreadsheetApp.getActiveSheet(); 

//スプレッドシートをクリア
  sp.clear();

//2 カレンダーをIDで読み込む
  var cal=CalendarApp.getCalendarById('d5vgjefhclkqnigusbk0cgm84g@group.calendar.google.com'); 

//3 カレンダーのイベントの期間を指定
  var date = new Date();
  var today = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0);   
  var endday = new Date(date.getFullYear(),date.getMonth(),date.getDate()+7,23,59);
  
  var event = cal.getEvents(today,endday); 

//4 イベントをスプレッドシートへ書き出す
  for(var i=1;i<event.length+1; i++){
    sp.getRange('a'+i).setValue(event[i-1].getTitle());          //イベントタイトル
    sp.getRange('b'+i).setValue(event[i-1].getStartTime());        //イベント開始時刻  
    sp.getRange('c'+i).setValue(event[i-1].getEndTime());         //イベント終了時刻
    sp.getRange('d'+i).setValue("=round((rc[-1]-rc[-2])*24*60,0)");  //所要時間   
  }

};

 

1 スプレッドシートを読み込む

現在開いているスプレッドシートを読み込みます。
繰り返し使うことを考えて、データをクリアしておきましょう。

//1 スプレッドシートを読み込む
  var sp =SpreadsheetApp.getActiveSheet(); 

//スプレッドシートをクリア
  sp.clear();

 

2 カレンダーをIDで読み込む

カレンダーを開いてIDで読み込みます。

//2 カレンダーをIDで読み込む
  var cal=CalendarApp.getCalendarById('d5vgjefhclkqnigusbk0cgm84g@group.calendar.google.com'); 

メインで使っているカレンダーなら、IDは Google のメールアドレスです。

Google カレンダーを開き、読み込みたいカレンダーを選んで[設定と共有]をクリックすると、Screenshot_6カレンダー ID を確認できます。

Screenshot_7

IDをコピーして、サンプルプログラムへ貼り付けてみてください。

 

3 カレンダーのイベントの期間を指定

Googleカレンダーから読み込むイベント(予定)の範囲を指定します。
サンプルでは、今日から7日間という設定です。
var event = cal.getEvents(today,endday);
という部分で、どこからどこまで(todayからenddayまで)と指定し、そのうえで、todayとenddayをそれぞれ設定しています。

//3 カレンダーのイベントの期間を指定
  var date = new Date();
  var today = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0);   
  var endday = new Date(date.getFullYear(),date.getMonth(),date.getDate()+7,23,59);
  
  var event = cal.getEvents(today,endday); 

 

4 イベントをスプレッドシートへ書き出す

GoogleカレンダーのイベントをGoogleスプレッドシートに書き出します。
Screenshot_4
サンプルでは、
A列にイベント(予定)
B列には開始時刻
C列に終了時刻
D列には、B列とC列から計算して、所要時間
を入れています。

//4 イベントをスプレッドシートへ書き出す
  for(var i=1;i<event.length; i++){
    sp.getRange('a'+i).setValue(event[i-1].getTitle());          //イベントタイトル
    sp.getRange('b'+i).setValue(event[i-1].getStartTime());        //イベント開始時刻  
    sp.getRange('c'+i).setValue(event[i-1].getEndTime());         //イベント終了時刻
    sp.getRange('d'+i).setValue("=round((rc[-1]-rc[-2])*24*60,0)");  //所要時間   
  }

};

 

期間指定、スプレッドシートの位置などGASのアレンジ

このプログラムを次のようにアレンジもできます。

期間指定

期間の指定はこの位置を変えてみましょう。
+7を1や30に変えることができます。

//3 カレンダーのイベントの期間を指定
  var date = new Date();
  var today = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0);   
  var endday = new Date(date.getFullYear(),date.getMonth(),date.getDate()+7,23,59);
  
  var event = cal.getEvents(today,endday); 

過去の日付(31日)なら、こうします。

//3 カレンダーのイベントの期間を指定
  var date = new Date();
  var today = new Date(date.getFullYear(),date.getMonth(),date.getDate()-31,0,0);   
  var endday = new Date(date.getFullYear(),date.getMonth(),date.getDate(),23,59);
  
  var event = cal.getEvents(today,endday); 

 

特定の日付にするなら、次のように指定することもできます。

//3 カレンダーのイベントの期間を指定
  
      var event = cal.getEvents(new Date('2019/8/1 0:00'),new Date('2019/8/31 23:59')); 
 

 

読み込むカレンダーが複数の場合

共有カレンダーも使っていたり、複数のカレンダーをひとりで使っていたりする場合、このプログラムをコピーして複製し、IDをそれぞれ指定して実行するという方法が、かんたんでおすすめです。
その際、
//1 スプレッドシートを読み込む var sp =SpreadsheetApp.getActiveSheet();
//スプレッドシートをクリア sp.clear();
の部分は最初だけにしましょう。
(そうしないと、毎回クリアしてしまうので)
私は、自分のカレンダー、妻との共有カレンダーを使っているので、そうしています。

スプレッドシートの位置

A列に〇〇、B列に〇〇という位置は、この部分で変更できます。。
好みの位置に変えてみましょう。。

//4 イベントをスプレッドシートへ書き出す
  for(var i=1;i<event.length+1; i++){
    sp.getRange('a'+i).setValue(event[i-1].getTitle());          //イベントタイトル
    sp.getRange('b'+i).setValue(event[i-1].getStartTime());        //イベント開始時刻  
    sp.getRange('c'+i).setValue(event[i-1].getEndTime());         //イベント終了時刻
    sp.getRange('d'+i).setValue("=round((rc[-1]-rc[-2])*24*60,0)");  //所要時間   
  }

};

変えてみてうまく動かなかったら、元に戻せばいいだけです。
私は、自分のExcelタスク管理のために次のような配置にしています。。
(タスク管理セミナーにご参加いただいた方は使うと便利かと)。
Screenshot_2

//イベントをスプレッドシートへ書き出す
  for(var i=1;i<event.length+1; i++){
    sp.getRange('e'+i).setValue(event[i-1].getTitle());          //イベントタイトル
    sp.getRange('g'+i).setValue(event[i-1].getStartTime());        //イベント開始時刻  
    sp.getRange('h'+i).setValue(event[i-1].getEndTime());         //イベント終了時刻
    sp.getRange('a'+i).setValue("=date(year(rc[6]),month(rc[6]),day(rc[6]))");   //日付
    sp.getRange('c'+i).setValue("=hour(rc[4])");                     //時刻
    sp.getRange('f'+i).setValue("=round((rc[2]-rc[1])*24*60,0)");          //所要時間   
  }

 

カレンダーのデータ活用、ぜひやってみていただければ。

 

ショートカットキーでGASを実行できるようにしておくとさらに便利です。

Excelマクロ・GAS・RPA(UiPath)実行のショートカットキー | EX-IT



■編集後記

中学3年生の甥っ子の宿題で、税に対する意見を述べるというのがあり、手伝いました。
テーマは消費税の軽減税率。
2人で話し合った結果をメモし、LINEで送りました。
せ、先生が知っているかどうか少々不安ですが。

「1日1新」

妹たちと恵比寿→自宅
甥っ子の宿題

■娘(2歳)日記

お医者さんごっこも最近好きです。
「どこが痛いですかー」と、薬を塗ったり聴診器を当てたり。
YouTubeでセリフを覚えているようです。