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 ループで回しながら、検索シートに入力した開始時刻・終了時刻と順に比較し、重複がなければ “予約可能” を、あれば “重複” を結果セルに入力します。