CRMシステムと遊んでいたら「間違えてカレンダー数千件のイベントを立ててしまった」ということがよくあるでしょう。
1件1件削除していたら1週間かかってしまいます。1週間この仕事に集中するのもおすすめですが、もっとおすすめなのがGASを使った一括削除です。
事前準備
あとはGASに次のスクリプトをセットします。
function getCalendarEvents() {
var calendar = CalendarApp.getDefaultCalendar();
const startTime = new Date('2021/07/14 00:00:00'); // 間違えてデータを入れてしまった日付の開始日
const endTime = new Date('2021/07/15 00:00:00'); // 間違えてデータを入れてしまった日付の終了日
const events = calendar.getEvents(startTime, endTime);
const values = [];
for(const event of events){
const record = [
event.getTitle(),
event.getStartTime(),
event.getEndTime(),
event.getId()
];
values.push(record);
}
SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values);
}
function deleteCalendarEvents(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var calendar = CalendarApp.getDefaultCalendar();
var ids = sheet.getRange(2, 4, sheet.getLastRow() - 1).getValues();
for(var i=0; i<ids.length; i++){
var event = calendar.getEventById(ids[i]);
event.deleteEvent();
}
}
やってみよう
初回実行時はGoogleカレンダーへアクセス許可が求められるので、覚悟を決めたらOKしてください。
-
getCalendarEvents()
を実行する - うまくいくと以下のキャプチャのように予定が取れます
- 消したくない行を削除します
-
deleteCalendarEvents()
を実行して、待ちます。 - みるみるうちに(意外と遅いペースで)予定の件数が減っていきます。
- 実行が終わったらおしまいです。
最後に
どうでしょう。この記事を書き始めるときに残り2000件だったカレンダーのイベントが、もう500件になろうかとしています!
Don't be afraid of mistakes!
(久しぶりにコード書いて楽しかったです。弊社の愛すべき開発チームがQiita LGTMを集めているので貢献します)
追記
Rate limited! しきい値は15分以内に2500件てところかな。
大量すぎる場合は何回かに分けて実施しましょう。
今回はDelete結果をロギングしてないので、リジュームする場合は、一回スプシを空っぽにしてGetからやり直すのが良いと思います。