【问题标题】:Google AppsScript: Remove recurring (eventSeries) from Google CalendarGoogle Apps 脚本:从 Google 日历中删除重复的(事件系列)
【发布时间】:2022-01-13 22:09:04
【问题描述】:

我有以下代码从我的谷歌日历中删除在谷歌表格中标记为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
}

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-calendar-api


    【解决方案1】:

    有一个线程指出了该问题,您需要先删除该事件的重复发生,然后在Google Calendar script: remove recurrence 上的循环中删除其余事件

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

    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');
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多