Google Apps Scriptで特定月のカレンダーのイベント情報を取得する


event

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Googleカレンダーの記録を活用して過去の仕事の生産性を測定する方法にお伝えしています。

前回は、以下の記事でカレンダーを操作する最初の一歩についてお伝えしました。

Google Apps ScriptでGoogleカレンダーを操作する最初の一歩のスクリプト
GAS、Googleカレンダー、スプレッドシートを活用して、これまでの仕事の生産性を測定する方法をお伝えしています。今回は、Google Apps ScriptでGoogleカレンダーを扱う最初の一歩です。

さて、今回ですがGoogle Apps Scriptで特定の月のカレンダーのイベント情報を取得する方法についてお伝えします。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

まずは、前回のおさらいからです。

作成したスクリプトはこちらでした。

const CALENDAR_ID = '**********'; //カレンダーID
function getCalendarEvents() {
  const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
  console.log(calendar.getName());
}

カレンダーIDを使って、カレンダーを取得し、そのカレンダー名をログ出力するというものでした。

今回は、この取得したカレンダーから、特定月のイベントを取得する方法をお伝えしていきます。

カレンダーのイベント情報を取得するスクリプト

早速ですが、特定月の一カ月分のイベント情報を取得するスクリプトはこちらです。

const CALENDAR_ID = '**********'; //カレンダーID
function getCalendarEvents() {
  const calendar = CalendarApp.getCalendarById(CALENDAR_ID);  
  const startTime = new Date('2020/04/01 00:00:00');
  const endTime = new Date('2020/05/01 00:00:00');
   
  const events = calendar.getEvents(startTime, endTime);
 
  for(const event of events){
    console.log(event.getTitle());
  }
 
}

スクリプトの流れですが、以下のようになっています。

  1. カレンダーIDを指定してカレンダーを取得
  2. 取得する期間の開始日と終了日を生成
  3. カレンダーのイベントを配列として取得
  4. 配列をループして取得したイベントのイベント名をログ出力

1は前回解説した部分になりますので、2以降について、以下解説をしていきますね。

指定期間内のイベントを取得する

カレンダーから一定の期間のイベントを取得するには、getEventsメソッドを使います。

Calendarオブジェクト.getEvents(開始日, 終了日)

これで開始日から終了日の期間内の一連のイベントをEventオブジェクトの配列として取得します。

スクリプト内でこれを行っているのが、7行目です。

ちなみに、この開始日、終了日ですが、Dateオブジェクトというオブジェクトで指定する必要がありますので、以下で解説します。

Dateオブジェクトと開始日と終了日

Dateオブジェクトというのは日時を表すオブジェクトで、年、月、日、時、分、秒、ミリ秒といった日時を表す要素を持っています。

そのDateオブジェクトですが、今回イベントを取得する期間の開始日、終了日を表すDateオブジェクトを生成しているのが、スクリプト内の4,5行目です。

Dateオブジェクトを生成するには、new演算子による以下の書式を使います。

new Date(日時)

日時は、それを表す文字列を指定することができます。

つまり今回は、2020/04/01 00:00:00 ~ 2020/05/01 00:00:00の期間をイベント取得の対象とするということになりますね。

イベントの配列をループしてイベント名を出力する

さて、getEventsメソッドで取得できるのは、Eventオブジェクトの配列、つまり集合になります。

配列から個々の要素を順番に取り出すには、以下構文のfor…of文を使います。

for (const 定数 of 配列){
 //処理
}

配列に含まれるすべての要素について、定数に取り出しながら繰り返し処理を行います。

今回の場合は、9~11行目がその部分で、毎回のループで順番にEventオブジェクトを取り出せるというわけです。

Eventオブジェクトからイベント名を取得する

その、ループ内の処理ですが、getTitleメソッドでイベント名を取り出します。

Eventオブジェクト.getTitle()

そして、それをログ出力しているのですね。

特定月のイベント名をログ出力した結果

このスクリプトを実行した結果がこちらです。

カレンダーのイベント名をログ出力

ちゃんと出力することができましたね。

まとめ

以上、Google Apps Scriptで特定の月のカレンダーのイベント情報を取得する方法についてお伝えしました。

Dateオブジェクトの生成、for…of文など、ぜひマスターしちゃいましょう。

次回は出力先をログではなくて、スプレッドシートに切り替えて集計をしやすくしていきます。

Google Apps ScriptでGoogleカレンダーの記録をスプレッドシートに出力する
Googleカレンダーの記録を活用して仕事の生産性を測定する方法を進めています。Googleカレンダーの特定の月のイベントをスプレッドシートに出力するGoogle Apps Scriptを紹介します。

どうぞお楽しみに!

連載目次:GASとカレンダーの記録を活用して過去の仕事を振り返る

企業ではスプレッドシートを勤怠管理やプロジェクト進捗管理などに使っている場合も多いと思います。このシリーズでは、カレンダーとスプレッドシート、そしてGoogle Apps Scriptを使って仕事の生産性を測定する方法についてお伝えしています。
  1. GASで仕事の生産性を測定して振り返るためのGoogleカレンダーの使い方
  2. Google Apps ScriptでGoogleカレンダーを操作する最初の一歩のスクリプト
  3. Google Apps Scriptで特定月のカレンダーのイベント情報を取得する
  4. Google Apps ScriptでGoogleカレンダーの記録をスプレッドシートに出力する
  5. Google Apps ScriptでGoogleカレンダーの場所・説明を取得する方法
  6. Google Apps Scriptで時刻計算と文字列抽出の数式を入力する方法
  7. Google Apps Scriptで任意の月のカレンダーデータをスプレッドシートに書き出す方法
  8. Googleカレンダーの記録を活用してスプレッドシートに業務別の工数計算

コメント

  1. AK より:

    11行目にエラー出ないでしょうか?

    TypeError: null のメソッド「getEvents」を呼び出せません。(行 11、ファイル「コード」)

    • AKさん

      コメントありがとうございます!
      検証しましたが、無事に動作するようですね。

      以下「カレンダーID」ですが、対象のカレンダーのものに差し替える必要があります。差し替えていらっしゃいますでしょうか?

        var myCal=CalendarApp.getCalendarById('カレンダーID'); //特定のIDのカレンダーを取得
      

      そのまま実行されると、ご指摘のエラーが発生します。

      もしそうであれば、カレンダーIDの設定について以下記事をご参考頂ければと思います。
      http://tonari-it.com/gas-calendar/

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