1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

カレンダーの予定をスプレッドシートに自動入力(GoogleCalendar × SpreadSheet)

Posted at

はじめに

本記事では、GoogleCalendarに登録されているイベントが持つデータをスプレッドシートに書き込む方法を紹介します。
以下の手順で、カレンダー上にある実行日のすべての予定から「タイトル・時間・時間」を取得します。

  1. GoogleCalendarのIDを取得
  2. GASスクリプトを作成
  3. 実行確認

図4.png

1. GoogleCalendarのIDを取得

GoogleCalendarを表示

GASでカレンダーの情報を取得するためには、そのカレンダーを特定するためのIDが必要になります。
Googleアカウントにログインし、アプリからカレンダーを表示します。
スクリーンショット 2021-09-26 14.08.02.png

GoogleCalendarIDを表示

次にGoogleCalendarIDを確認する方法です。
右上の歯車アイコンから「設定」を選択し、クリックします(2021/09現在のレイアウト)。
図1.png

すると、下記の画面が表示されるので左欄の「マイカレンダー設定」にある自身のアカウント名を選択し、クリックします。
図2.png

プルダウン式に項目が表示されるので「カレンダーの統合」をクリックします。
表示された画面上にあるカレンダーIDがカレンダー情報を取得するためのキーとなります。

図3.png

2. GASスクリプトを作成

カレンダーIDを取得したら、入力したいスプレッドシートを開き、スクリプトエディタを起動します。
以下のようにメインとなる関数と、オリジナルの日付フォーマットを行うための二つの関数を用います。
スクリーンショット 2021-09-28 9.17.18.png

コードの内容は以下の通りです。

timeFormater

引数から時間を受け取り、時単位と分単位で分けたあと、一桁の数字には先頭に0をつけて結果を返します

function timeFormater(time) {
  let hour   = time.getHours();
  let minute = time.getMinutes(); 

  //時単位が一桁なら0埋め
  if (String(hour).length === 1)
    hour = '0'+hour;

  //分単位が一桁なら0埋め
  if (String(minute).length === 1)
    minute = '0'+minute;

  return(hour +':'+ minute);
}

getGoogleCalendar

カレンダーから予定を、スプレッドシートからシートを取得し、実行日の予定をスプレッドシート上に書き出しています。

function getGoogleCalendar() {
  //GoogleCalendar
  const id_calendar = '***********@gmail.com';                  // カレンダーのIDを取得
  const calendar    = CalendarApp.getCalendarById(id_calendar); // IDからカレンダーを取得  
  
  //SpreadSheet
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();    // アクティブなスプレッドシートを取得
  const sheet       = spreadsheet.getActiveSheet();             // 取得したスプレッドシートのアクティブなシートを取得

  //予定の取得
  const date   = new Date();                                    // 今日の日付を取得。dateに格納
  const events = calendar.getEventsForDay(date);                // 取得したカレンダーからdateの日付にあるカレンダーの予定を取得

  // イベント数分の繰り返し処理
  for (let e in events){
    let start_time = timeFormater(events[e].getStartTime());    // カレンダーに登録されたイベントの開始時刻を取得
    let end_time   = timeFormater(events[e].getEndTime());      // カレンダーに登録されたイベントの終了時刻を取得

    //タイトル + 時間 + 説明を表示
    let context = events[e].getTitle() +' '+ start_time +'-'+ end_time +'\n'+ events[e].getDescription();
    console.log(context);

    sheet.getRange('A'+(Number(e)+1)).setValue(context);
  }
}

3. 実行確認

このように、カレンダー上に設定された予定を取得し、いい感じな形に成形することができました。
さまざまな条件設定や、ボタンを配置することができれば時間にかかる予定表、日報も短時間でつくることができそうです。

スクリーンショット 2021-09-26 14.06.59.png
↑スクリプトエディタ上
スクリーンショット 2021-09-27 20.00.07.png
↑スプレッドシート上

参考URL

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?