広告

【コピペでOK!】スプレッドシートとカレンダーを連携してイベントを一括登録する方法

2017年12月21日

STEP4. スプレッドシートの値をGoogleカレンダーへ登録(時間取得)

スプレッドシートの値を「時間・分・秒」に変換していきます。

//i行4列目の値(開始時刻)をstartへ格納
var starttime = sht.getRange(i,4).getValue();
var H = starttime.getHours();//starttimeの時間を取得してHへ格納
var M = starttime.getMinutes();//starttimeの分を取得してMへ格納
var S = starttime.getSeconds();//starttimeの秒を取得してSへ格納
//new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納
 var start = new Date(b+" "+H+":"+M+":"+S); 
//i行5列目の値(終了時刻)をendへ格納
var endtime = sht.getRange(i,5).getValue();
var H1 = endtime.getHours();//endtimeの時間を取得してH1へ格納
var M1 = endtime.getMinutes();//endtimeの分を取得してM1へ格納
var S1 = endtime.getSeconds();//endtimeの秒を取得してS1へ格納
//new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納
 var end = new Date(b+" "+H1+":"+M1+":"+S1);

あひる
あひる
うう・・なんだか難しそうな記号が並んでる...
ううこ
ううこ
ここは肝の部分だからなんとかがんばってくれ

STEP4−1. 開始時刻を変数へ設定

i行4列目の値を「時間・分・秒」へ変換し、各「H・M・S」へ代入します。

//i行4列目の値(開始時刻)をstartへ格納
var starttime = sht.getRange(i,4).getValue();
var H = starttime.getHours();//starttimeの時間を取得してHへ格納
var M = starttime.getMinutes();//starttimeの分を取得してMへ格納
var S = starttime.getSeconds();//starttimeの秒を取得してSへ格納
  • getHours()で取得したセル日時の時間を返します。
  • getMinutes()で取得したセル日時のを返します。
  • getSeconds()で取得したセル日時のを返します。
POINT!

getSeconds(秒)は作成しなくてもカレンダーへ登録できます。

あひる
あひる
1つのセルの値を「時間・分・秒」にわける必要があるから3回に分けて変換してるってこと?
ううこ
ううこ
そのとおりだ。

STEP4-2. 開始日と開始時間をまとめる

取得した開始日と開始時間をまとめます。

//new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納
 var start = new Date(b+" "+H+":"+M+":"+S);

あひる
あひる
なんでわざわざ開始日と開始時間をまとめるの?
ううこ
ううこ
createEventメソッドのstartTime、endTimeの指定が日時指定になっているからだ。
あひる
あひる
開始日と開始時間を1つにまとめないと上手く動かないっていうこと?
ううこ
ううこ
そういうこと

createEvent(title, startTime, endTime, options)

タイプ 説明
title String イベントのタイトル
startTime Date イベントが開始された日時
endTime Date イベントが終了した日時
options Object 以下に示す高度なパラメーターを指定するJavaScriptオブジェクト

引用元:createEvent

STEP4-3. 終了時刻を変数へ設定

開始日時と同様にi行5列目の値を「時間・分・秒」に変換し「H1・M1・S1」へ格納したら、終了日とまとめてendへ格納します。

//i行5列目の値(終了時刻)をendへ格納
var endtime = sht.getRange(i,5).getValue();
var H1 = endtime.getHours();//endtimeの時間を取得してH1へ格納
var M1 = endtime.getMinutes();//endtimeの分を取得してM1へ格納
var S1 = endtime.getSeconds();//endtimeの秒を取得してS1へ格納
//new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納
 var end = new Date(b+" "+H1+":"+M1+":"+S1);

あひる
あひる
よっしゃ!時間へ変換して格納出来た!
ううこ
ううこ
もう一息。がんばってくれ

STEP5. イベントをカレンダーへ登録する

ここまで取得した値をカレンダーへ登録していきます。またカレンダー登録が完了したら ”登録完了” と表示が出るように設定していきます。

/*--カレンダーへ登録--*/
//i行6列目の値(イベント登録有無)をaddedへ格納
added = sht.getRange(i,6).getValue();
//addedの値が空白だったらカレンダー登録を実行
if(added == "") {
Cal = CalendarApp.getCalendarById("◯◯◯@gmail.com");
//指定のカレンダーIDへインベント登録
Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)
//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
sht.getRange(i,6).setValue("登録完了");
  }   //ifを閉じる
 }      //forを閉じる
}         //functionを閉じる
あひる
あひる
やっと登録できる...

STEP5-1. イベントの有無を取得

i行6列目の値をaddedへ格納します。

//i行6列目の値(イベント登録有無)をaddedへ格納
added = sht.getRange(i,6).getValue();

STEP5-2. addedが空白ならイベント登録を開始

i行6列目の値(added)が空白ならイベント登録を開始します。

//addedの値が空白だったらカレンダー登録を実行
if(added == "") {
Cal = CalendarApp.getCalendarById("◯◯◯@gmail.com");
//指定のカレンダーIDへインベント登録
Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)
//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
sht.getRange(i,6).setValue("登録完了");

今まで変数に格納した値をcreateEventメソッドに設置していきます。

//指定のカレンダーIDへインベント登録
Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)
  • eventname = イベントの名前
  • start = イベント日 + 開始時刻
  • end = イベント日 + 終了時刻
  • place = 場所

カレンダー登録が完了したイベントに”登録完了”を記入します。

//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
sht.getRange(i,6).setValue("登録完了");

あひる
あひる
よし、終わり...
ううこ
ううこ
最後にif文の閉じカッコとfor文の閉じカッコ、functionの閉じカッコを設置して完了だ。

} //ifを閉じる
} //forを閉じる
} //functionを閉じる

上手く設定が完了すればこんな感じに実行出来ていると思います。

あひる
あひる
やった!出来たw
ううこ
ううこ
おつかれさま

スプレッドシートとカレンダーを連携してイベントを一括登録する方法. まとめ

スプレッドシートからGoogleカレンダーへ上手く連携は出来ましたか?

説明が長くなってしまいましたがまとめると

  1. スプレッドシートの値を取得して
  2. 日付けや時間をフォーマットして
  3. カレンダー登録

という流れになります。

あひる
あひる
Google apps script入門じゃなくて実践編になってるよね
ううこ
ううこ
うふふ

あまりにも長くなってしまったのですが、次回はもうちょっとスマートにお伝え出来るようにがんばります。

OYAKUN
OYAKUN
コードの内容を少し改変すれば自分だけの「スプレッドシート&カレンダー連携」オリジナルツールが作れますよ♪

関連記事: 【即戦力】GASでアラートメールを作成して期日になったら自動通知
関連記事: スプレッドシートのマクロの使い方|3STEPで簡単自動化
関連記事: スプレッドシートで複数ある重複セルごとに色を変更する方法