スプレッドシート+GASでGoogleカレンダーからイベントを抽出する

Google Apps Scriptを使って、Googleカレンダーからイベントを抽出し、スプレッドシートに出力してみました。

完成品

searchシートに、イベントを検索する日時の範囲(FromTo)を入力

From,Toに検索対象日時の範囲を入力する。未入力だった場合は今年始~今年末の範囲が対象となる。

スクリプトを実行すると、抽出結果がスプレッドシートに出力される

検索対象のカレンダー
抽出結果(From – To の範囲内のイベントのみ抽出される)

スクリプト

スプレッドシートのツール > スクリプトエディタよりスクリプトエディタを起動し、コード.gsに下記のスクリプトを貼り付けます。

// カレンダー・スプレッドシートの取得
const calendar = CalendarApp.getCalendarById("xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com");
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("search");

function getEvents(){
  // スプレッドシートをクリア
  sheet.getRange("A5:G").clear();

  // スプレッドシート入力値を取得
  const dtFrom = sheet.getRange("B1").getValue();
  const dtTo = sheet.getRange("B2").getValue();

  // カレンダーからイベントを取得
  const events = calendar.getEvents(
    dtFrom ? dtFrom : new Date( new Date().getFullYear(), 0 ),
    dtTo ? dtTo : new Date( new Date().getFullYear() + 1, 0 )
  );

  // イベントの情報を配列に格納
  const records = events.map(event => {
    return [
      event.getId(),            // イベントID 
      event.getTitle(),         // タイトル
      event.getStartTime(),     // 開始日時
      event.getEndTime(),       // 終了日時
      event.getDescription(),   // 説明
      event.getLocation(),      // 場所
      event.getGuestList().map(guest =>
        guest.getEmail()
      ).join(",")               // ゲストのEmail(カンマ区切り)
    ]
  })

  // スプレッドシートに貼り付け
  sheet.getRange(5, 1, records.length, 7).setValues(records);
}

*コード冒頭の”xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com”部分には、イベントを登録したいカレンダーのIDを入力してください。(Googleカレンダーの「設定と共有」画面の「カレンダーの統合」部分にあるカレンダーIDです)

その後、スクリプトエディタの▷実行で実行します。

(もしくは、スプレッドシート上に図形描画でボタンを配置して、スクリプトを割り当てgetEventsを割り当ててください)

コメント

  1. 亀山瑞季 より:

    スプレッドシートにどうやったら出力できるか悩んでいたので大変助かりました!
    最後の「スプレッドシートに貼り付け」のところでエラーが起こり、スケジュールを書き出してもらえません。
    どうしたらいいでしょうか?