複数のGoogleカレンダーをスプレッドシートに自動で書き込むプログラム

プログラミング

今回は、複数のGoogleカレンダーをスプレッドシートに自動で書き込むプログラムを紹介します。

Googleカレンダーではgoogleworkspaceのアカウントを持っていないと、カレンダーに記録した行動時間の分析機能が使えないようです。

googleworkspaceのアカウントは、

職場に勤めている人でないと登録できないですし、

月々600円程度のお金がかかります。

そのため、今回はgoogleカレンダーに記録した行動をgoogleスプレッドシートに記録する方法を教えます。

大まかな作業の流れ・解説

googleカレンダーに行動(または予定)を記録する

今回は、複数のカレンダーを使って、記録しています。そうすることで、以下のように行動別に色分けをして見やすくしたり、スプレッドシートに転記したさいに分析しやすくするためです。

行動記録

上記のように、私は勉強内容ごとにカレンダーを作りました。

googleスプレッドシートに記録するためのマクロプログラムをAppscriptに貼り付け、実行する

まず、Googleスプレッドシートの画面に行ったら、拡張機能→Appscriptを押します。

そして、以下のコードを貼り付けてください。(このコードは、MY-TERRACEさんの記事をとても参考にしました。ありがとうございます。)

function getCalendars() {

  var mySheet=SpreadsheetApp.getActiveSheet();  //シートを取得
  var RANGE = 2;  // スプレッドシート:開始位置
  var FORMAT_TIME = 'mm/dd hh:mm';  // スプレッドシート

  var no=1;//No

  //array1に各カレンダーのIDを入力
  var array1 = new Array('カレンダーID1つ目','カレンダーID2つ目','カレンダーID3つ目');
  var mycals = new Array(array1.length);
  for(var index = 0; index < array1.length; index++){
    mycals[index]=CalendarApp.getCalendarById(array1[index]);  //特定IDのカレンダーを取得
  }
  
  var date='2023/3/01 00:00:00';  //対象月を指定
  var startDate=new Date(date);  //取得開始日
  var endDate=new Date(date);
  endDate.setMonth(endDate.getMonth()+24);  //取得終了日(自動計算)
  for(var cnt = 0; cnt < mycals.length; cnt++){
    var schedules = mycals[cnt].getEvents(startDate,endDate);  //予定オブジェクトの生成 
    for(var index = 0; index < schedules.length; index++) {
      var range = RANGE + index;

    // IDを出力
      mySheet.getRange(range, 1).setValue(no);

    // カレンダー名を出力
      mySheet.getRange(range, 2).setValue(mycals[cnt].getName());

    // 予定名を出力
      mySheet.getRange(range, 3).setValue(schedules[index].getTitle());

    // 開始時間を出力
      mySheet.getRange(range, 4).setValue(schedules[index].getStartTime()).setNumberFormat(FORMAT_TIME);

    // 終了時間を出力
      mySheet.getRange(range, 5).setValue(schedules[index].getEndTime()).setNumberFormat(FORMAT_TIME);

    // 稼働時間を出力
      mySheet.getRange(range, 6).setValue("=CEILING((INDIRECT(\"RC[-1]\",FALSE)-INDIRECT(\"RC[-2]\",FALSE))*24,0.01)");

    // イベント内容を出力
      mySheet.getRange(range, 7).setValue(schedules[index].getDescription()).setNumberFormat(FORMAT_TIME);

      no++; // end function
    }
    RANGE += schedules.length
  // 予定を繰り返し出力する
  }

※カレンダーIDは、Googleカレンダーの画面左下の”マイカレンダー”にある各カレンダーの”設定と共有”を押し、中央当たりに記載されています。

以下の、コードを貼り付けてAppscriptの”実行”を押すと、以下のようにカレンダーの行動記録がスプレッドシートに移されます。

実行ができたあとは、スプレッドシートの画面の拡張機能→マクロ→「マクロをインポート」を選んで、「getCalendars()」を選択してください。

すると次回から、拡張機能→マクロを押したときに「getCalendars()」が表示されるので、そこをクリックすれば、プログラムが実行されて自動でカレンダーの読み込みが行われます。

個人的なGoogleカレンダーとGoogleスプレッドシートの使い方

1.Googleカレンダーで行動の記録をつけて、不要な行動を理解する

とくに、私は一日のなかで無駄な行動(ネットサーフィンやYoutube)をしてしまって、気づかぬうちに時間がたってしまうことが多いため記録をつけるようにしました。

2.勉強時間を記録し、分析する

Googleスプレッドシートに勉強記録が積み重なり、のちのち表計算やグラフを使って日々の学習記録を知ることで、さらなる勉強のモチベーションにつながると思っています。

また、勉強分野ごとにカレンダーを作って記録しているため、勉強割合も知ることができ、時間配分を最適化することができます。

3.データサイエンスの素養を身につける??

このGoogleカレンダーやGoogleスプレッドシートでとった自分の行動データを分析して、

例えば、ネットサーフィンをした後は、全く勉強をしなくなるだったり、

朝寝坊した日は、そのままやる気が無くなってYoutubeやインターネットに逃げるだったり、

といった自分の行動の規則性を表計算ソフトを使ったり、目で見たりして発見する過程を通じて、データサイエンスの素養を(あわよくば)身につけたいです。

以上、読んでいただきありがとうございました。

以下の記事もお勧めです。

また、スケジュールを読み込み、自分の行動時間を確認したら、あとはどういった行動をしていくかが大事です。できれば、運を高める行動をしたいというひとにおすすめの記事です。

コメント

タイトルとURLをコピーしました