見出し画像

スプレッドシートを元にGoogleカレンダーのイベントを一括で複数削除できるようにしてみた

Googleカレンダーには「繰り返しイベント」という機能があり、設定すると同じ時間帯のイベントを瞬時に登録することが可能。

これは非常に便利で、私も毎日繰り返す作業や定例ミーティングを登録しています。

ただ、この機能は祝日や有給休暇などのイレギュラーな休日を認識しないので、休みの日にもカレンダーが埋まった状態になります。(今回のゴールデンウィーク期間もそうでした。)

せっかくの休みに通知が来るのは煩わしいですが、イベントを一つひとつ削除するのも面倒

ということで今回は「スプレッドシートに入力したデータを元にGoogleカレンダーのイベントを一括で複数削除する」ツールを作ってみました。

スクリーンショット 2021-05-06 23.24.53

(※ イメージ。イベントの日付とタイトルを貼って「イベントを削除」を押すとカレンダーの該当イベントが削除される)

① スプレッドシートで箱を作る

まずはデータ元になるスプレッドシートを作成。ただ、ほとんどやることはなく、最低限「日付」と「タイトル」が入力されていれば機能します。

▼ 実際のスプレッドシート
https://docs.google.com/spreadsheets/d/1ZVabRnC7q5ghu-8AcQTsWUkq_uVeQEatDuI_XjGwMEE/edit?usp=sharing

② GASでコードを書く

イベントの特定は「.getEventForDay('{イベントの日付}', {search: "{イベントのタイトル}"})」で、またその削除は「Data.deleteEvent()」で簡単にできるので以下のように非常にシンプルな感じになりました。

イベントの日付とタイトルはスプレドシートから取得できるようにしています。

function deleteEvent() {
 let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 let eventLength = sheet.getRange('A:A').getValues().filter(String).length-1;

 let calendar = CalendarApp.getCalendarById('{カレンダーID}');

 for (i=1; i<=eventLength; i++) {
   let eventDate = sheet.getRange(i+1,1).getValue();
   let eventTitle = sheet.getRange(i+1,2).getValue();
   let eventData = calendar.getEventsForDay(eventDate, { search: eventTitle })[0];
   eventData.deleteEvent();
 }
}

▼ 参考にしたサイト
https://for-dummies.net/gas-noobs/how-to-delete-calendar-events-by-gas/

これまでイレギュラーな休日のイベント削除が非常に面倒でしたが、これで作業時間はグッと少なくなると思うので是非ご参考にしていただたら幸いです。

(ただ、これまでのnoteでも触れているように、私はまだGAS初心者ですのでミスや改善点もたくさんあると思います...。)

このnoteを書いている人:
吉川 佳佑(よしかわ けいすけ)
1993年、石川県金沢市生まれ。高校教師。
2015年に金沢大学 教育学類を卒業後、地元の私立高校に英語教師として赴任。ICTを活用した教育の実践と普及に務め、現在は関東の高校で教鞭を執る。
著書『高校教師、住まいを捨てる。』(河出書房新社)
この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
この「スキ」が次の記事執筆の原動力になります。
13
高校教師 / ミニマリスト / 拙著『高校教師、住まいを捨てる。』(河出書房新社)/ ご連絡はTwitterのDMよりお気軽に📮