Googleカレンダーにスケジュールを登録する際、Googleカレンダーの画面からの手動登録であれば、スケジュールの重複が目で確認できますが、Google Apps Scriptからスケジュールを登録する場合は、スクリプトによる重複チェックが必要になる場合があると思います。
会議室予約システムや、物品の貸出予約システムを作るような場合に備え(?)、スケジュールの重複をチェックするスクリプトを作成しました。
重複チェックスクリプト
function checkConflict(calendarId, dtFrom, dtTo){
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEvents(dtFrom, dtTo);
if (events.length === 0){
return true;
} else {
return false;
}
}
引数は3つで、①カレンダーID、②利用開始日時、③利用終了日時です。
当該カレンダー内に、重複するイベントが存在しなければTrueを、存在したらFalseを返します。
テスト
早速テストをしてみます。
まずは対象のGoogleカレンダーにイベントを入力しておきます。
8/12 15:00-16:00の予定にしました。

次に、テスト用のスクリプトを作成しました。
function test(){
const calendarId = "xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com";
const dtFrom = new Date(2021, (8 - 1), 12, 14, 30);
const dtTo = new Date(2021, (8 - 1), 12, 15, 00);
const result = checkConflict(calendarId, dtFrom, dtTo);
Logger.log(
"開始:" + dtFrom + "\n" +
"終了:" + dtTo + "\n" +
"結果:" + result
);
}
*コード冒頭の”xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com”部分には、イベントを登録したいカレンダーのIDを入力してください。(Googleカレンダーの「設定と共有」画面の「カレンダーの統合」部分にあるカレンダーIDです)
*3行目および4行目のhh, mmには、重複チェックしたいイベントの開始時刻・終了時刻を入力してください。(なお、月はJavaScriptの仕様上、0からスタートします。(8 – 1)の場合は、7月ではなく8月を意味します。
テスト用のスクリプトを実行すると、下図のように、実行ログに結果が表示されます。

上記コードの時間部分を変えながら、何パターンか試してみました。
(下表は 2021/8/12 は省略しています)
| 開始(dtFrom) | 終了(dtFrom) | テスト結果 |
|---|---|---|
| 14:30 | 16:30 | False(重複あり) |
| 14:30 | 15:00 | True(重複なし) |
| 14:30 | 15:01 | False(重複あり) |
| 15:59 | 16:30 | False(重複あり) |
| 16:00 | 16:30 | True(重複なし) |
想定通りに重複チェックができていることが確認できました。

コメント