Google Apps 脚本:从 Google 日历中删除重复(事件系列)

Google AppsScript: Remove recurring (eventSeries) from Google Calendar

我有以下代码从我的 google 日历中删除在 google 工作表中标记为 Pending Removal 的事件。这段代码中删除单个事件的部分工作得很好,但我需要调整它以删除重复发生的事件。现在它只删除重复事件系列中的第一个事件。

注意:事件在 Column E 或 ```x[4]`` 中表示为待删除。

function calendarRemove() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName('Events Calendar')
  var settingsSheet = ss.getSheetByName('Calendar Settings');
  var calendarId = 'calendarID';
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var eventArray = dataSheet.getRange('A2:H').getDisplayValues();

  for (x = 0; x < eventArray.length; x++) {

    var event = eventArray[x];
    var eventName = event[1];
    var eventDate = new Date(event[0]);
    var timeZone = event[6];
    var startTime = new Date(`${event[0]} ${event[2]} ${timeZone}`);
    var endTime = new Date(`${event[0]} ${event[3]} ${timeZone}`);
    var status = event[4]; // Used in the following comparison expression

    if (status === 'Pending Removal') {
      var returnedEvents = eventCal.getEventsForDay(eventDate, {search: eventName});
      for (i = 0; i < returnedEvents.length; i++) {
        var toRemove = returnedEvents[i];
        if (toRemove.isRecurringEvent) {
          toRemove.deleteEventSeries();
        } else { toRemove.deleteEvent(); }
        eventArray[x][4] = 'Removed'; // Modifying the status value from "Pending Removal" to "Removed"
      }
    }
  }
  dataSheet.getRange('A2:H').setValues(eventArray); // Overwrite the source data with the modified array
}

有一个讨论帖指出了这个问题,您需要先删除重复发生的事件,然后在

的循环中删除其余事件

这个脚本可能会帮助你,在上一个线程的末尾

function deleteEvents()
{

  var calendarName = '<Name of the Calendar>';    
  var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
  var events = calendar.getEvents('<Sheet events where recurring events is set to "Yes">');

  for(var i=0; i < events.length;i++)
  {
    var ev = events[i];
    Logger.log('Checking Event Title === ' + calendar.getEventSeriesById(ev.getId()).getTitle());
    calendar.getEventSeriesById(ev.getId()).deleteEventSeries();
    Logger.log('Event Deleted');
  }
}