GASでGoogleスプレッドシートにエクスポートした予定表から空き時間を調べる方法

Yahoo!知恵袋の回答受付中の質問に勝手に答えるコーナーです。

今回の質問は、

Googleカレンダーで会議室用の共有カレンダーを作成し(リソースのブラウジング)、予約管理をしています。このカレンダーは、管理者のみ編集可能としているため、管理者以外の社員には非公開になっています。

会議室の一元管理のため、社員が会議室を予約したい場合は管理者に予約依頼をし、管理者がカレンダーから予約をするという運用をしています。

この会議室予約カレンダーを、一般の社員にも予約状況だけでも共有したいのですが、Googleカレンダーに「閲覧のみ」の権限設定が無い(できないように会社側で設定されている?)ためできません。
そこで、GASでカレンダーの登録状況をスプレッドシートに出力できるようにしました。しかし、出力データですとローデータですので非常に見づらいため、「条件を入力すると予約状況を照会できる」ようなものを作成したいと考えています。

<イメージ> ローデータとは別の空シートに、
・利用日
・開始時刻
・終了時刻
を入力し、重複があれば予定名を表示し、重複がなければ「予約可能」と表示させるようにしたい。

<出力データの項目>
・予定名
・開始時刻(yyyy/mm/dd hh:mm)
・終了時刻(yyyy/mm/dd hh:mm)
・所用時間(hh:mm)
・住所 (会議室名)
・予約者メールアドレス

予約時間は30分単位です。
GASは初心者でして、スプレッドシートへの出力はググって何とかできるようになりました。。

何か方法があれば教えていただきたいです。どうぞよろしくお願いいたします。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13218421603

スプレッドシート

Yahoo!知恵袋に添付されている画像をもとにサンプルデータを作成しました。

Googleカレンダーからエクスポートして、次のようなスプレッドシートが出来上がっている前提で進めます。

検索用のシートは次のように作りました。

利用日、開始時刻、終了時刻を入力して [検索]ボタンをクリックすると、重複がなければ “予約可能” 、あれば “重複” が結果セル表示されます。

スクリプト

var ssid = "xxxxxxxxxx";

の xxxxxxxxxx の部分にシートID を貼り付けます。

関数 search() を [検索] ボタンのクリックイベントに紐づけています。

日付の重複比較は、

によると、

「比較開始日付 <= 対象終了日付 AND 比較終了日付 >= 対象開始日付」

で判定できるようです。

この判定は、isOverlap() 関数で実装しました。

エクスポートした予約済みリストの開始時刻・終了時刻を for ループで回しながら、検索シートに入力した開始時刻・終了時刻と順に比較し、重複がなければ “予約可能” を、あれば “重複” を結果セルに入力します。