Google日历崩溃,无法删除事件

时间:2019-09-17 00:54:37

标签: google-apps-script

我犯了一个灾难性的错误。我使用Microsoft Flow将Google日历邀请添加到Outlook,然后将Outlook日历添加到Google。显然,这创建了一个循环的日历邀请函,现在我有成千上万个日历事件使日历无法打开。

我想批量删除所有这些事件。我创建了一个Google脚本,该脚本利用以下内容删除具有特定主题行的事件:

function delete_events() {
  var fromDate = new Date(2019,8,16,15,0,0); 
  var toDate = new Date(2019,8,18,11,0,0);  
  var calendarName = 'my email address';
  var toRemove = 'Heather Unavailable';
  var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
  var events = calendar.getEvents(fromDate, toDate,{search: toRemove});
  for(var i=0; i<events.length;i++) {
    var ev = events[i];//duplicate declaration
    if(ev.getTitle()==toRemove) {//check if the title matches
      var ev = events[i];//duplicate declaration
      Logger.log(ev.getTitle()); // show event name in log
      ev.deleteEvent();
    }
  }
}

但是,我遇到一个错误:

您在短时间内创建或删除了太多日历或日历事件。请稍后再试。 (第18行,文件“代码”)

请帮助!

1 个答案:

答案 0 :(得分:0)

尝试一下:

function delete_events() {
  var fromDate = new Date(2019,8,16,15,0,0); 
  var toDate = new Date(2019,8,18,11,0,0);  
  var calendarName = 'my email address';
  var toRemove = 'Heather Unavailable';
  var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
  var events = calendar.getEvents(fromDate, toDate,{search: toRemove});
  var ev;

  for(var i=0; i<events.length;i++) {
    for (var j = 0; j < 200; j++){
      ev = events[i];
      if(ev.getTitle()==toRemove) {//check if the title matches
        Logger.log(ev.getTitle()); // show event name in log
        ev.deleteEvent();
      }
    }
    Utilities.sleep(5000);
  }
}

这将在删除200个事件的批次之间等待5秒,您可以尝试删除事件的数量和等待时间。或者,您可以阅读Batch Requests以更好地管理大量请求,如果这样做,this answer提供了Drive API的示例(您需要Calendar API中的delete event method