
photo credit: wuestenigel Marked and written holiday in a calendar via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASでGoogleカレンダーに複数の予定をまとめて追加するスクリプトを作成する方法をお伝えしています。
前回の記事はこちら。

Googleカレンダーに一つのイベントを追加する簡単なスクリプトについて紹介しました。
今回は、GASでスプレッドシートに入力した内容をもとに、複数のイベントを追加できるようにしていきたいと思います。
では、行ってみましょう!
前回のおさらい
前回は、GASでデフォルトのカレンダーに単一のイベントを追加する方法をお伝えしました。
イベントを追加するメソッドはcreateEventメソッドです。
それで、作成したスクリプトがこちらですね。
function createEvents() { var calendar = CalendarApp.getDefaultCalendar(); var title = '研修1回目'; var startTime = new Date('2018/7/16 09:00:00'); var endTime = new Date('2018/7/16 12:00:00'); var option = { description: 'イントロダクション', location: '〒105-0011 東京都港区芝公園4丁目2−8' } calendar.createEvent(title, startTime, endTime, option); }
今回は、スプレッドシートに複数のイベント情報を入力しておいて、それをもとにイベントを追加できるようなスクリプトを作っていきたいと思います。
イベント情報を入力したスプレッドシート
まず、スプレッドシートを準備してみました。
こちらです。
各列の構成は以下のようになっていますよ。
列 | 見出し | データ型 | 説明 |
---|---|---|---|
A列 | イベントタイトル | String | イベント名 |
B列 | 開始時間 | Date | イベントの開始日時 |
C列 | 終了時間 | Date | イベントの終了日時 |
D列 | 場所 | String | 場所 |
E列 | 説明 | String | 説明 |
ほら、createEventメソッドで必要な引数に忠実に作ってみましたよ。
スプレッドシートから取得したデータの型を調べる
そういえば、createEventメソッドの開始時間、終了時間はDateオブジェクトで与える必要がありましたよね…
スプレッドシートで日付型で記述しているからって、それってgetValuesメソッドなどで取得したら、それはDateオブジェクトになるんですかね?
文字列型になっちゃったりしませんかね?
心配な方は、以下のようなスクリプトを実行してみましょう。
function checkType() { var calendar = CalendarApp.getDefaultCalendar(); var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); for(var i = 1; i < values.length; i++){ Logger.log('value:%s, type:%s',values[i][1], typeof values[i][1]); } }
3行目ですが、バインドしているスプレッドシートのアクティブシートの使用しているデータ範囲の値を二次元配列で取得しているステートメントになります。
そして、5行目からのfor文ですが、その二次元配列の見出し行の次から要素がある分だけ繰り返しをするというものです。
forループの処理ですが、2列目つまりB列の値とそのデータ型をログ出力しています。
typeof演算子で値のデータ型を確認する
typeof演算子は、値のデータ型を取得します。
前述のスクリプトを実行すると、以下のようなログ出力を得ました。
タイプは「object」となっていますね。おそらく、Dateオブジェクトとして取得されていると考えて良いでしょう。
スプレッドシートに入力した複数のイベントをカレンダーに追加するスクリプト
では、安心してスプレッドシートのイベントリストから、Googleカレンダーにイベントを追加するスクリプトを作ってみました。
function createEvents() { var calendar = CalendarApp.getDefaultCalendar(); var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); for(var i = 1; i < values.length; i++){ var title = values[i][0]; var startTime = values[i][1]; var endTime = values[i][2]; var option = { description: values[i][3], location: values[i][4] } calendar.createEvent(title, startTime, endTime, option); } }
このスクリプトを実行すると、以下のようにイベントが追加されたことを確認できました。
まとめ
以上、GASでスプレッドシートの入力をもとにGoogleカレンダーに複数のイベントを追加するスクリプトを紹介しました。
次回以降、このツールをもう少し便利にしていきたいと思います。
どうぞお楽しみに!