获取重复事件和非重复事件的单一统一实例

时间:2014-09-28 05:31:00

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

我正在尝试获取一个重复事件的统一实例以及我在其中所做的更改,以反映该重复事件的所有实例。

calendar.getEvents为周期性系列中的每个事件返回一个实例。即如果我对该实例进行任何更改,例如删除它,则只删除该特定实例。我尝试使用getEventSeries()deleteEventSeries(),但这些没有反映在数组中,所以每次删除时我都会调用getEvents。这是最好的方法吗?或者有替代品吗?

//The object of the following code is to delete all events in a calendar
function delete_events(calendar) {
  var fromDate = new Date("January 1, 1900 00:00:00");
  var toDate = new Date("January 1, 2100 00:00:00");
  var events = calendar.getEvents(fromDate, toDate);

  while (events.length > 0) {
    var ev = events[0];
    var es = ev.getEventSeries();
    es.deleteEventSeries();
    Logger.log('Deleted: ' + es.getTitle());

    events = calendar.getEvents(fromDate, toDate);
  }
}

1 个答案:

答案 0 :(得分:1)

由于eventsSeries具有相同的ID,您只需记住这些ID并在以下迭代中跳过这些事件即可简化该过程。

这是一个简单的测试代码:

function test(){
  var cal = CalendarApp.getCalendarsByName('some calendar name you own')[0];
  delete_events(cal);
}

function delete_events(cal) {
  var fromDate = new Date("January 1, 2014 00:00:00");
  var toDate = new Date("January 1, 2100 00:00:00");
  var events = cal.getEvents(fromDate, toDate);
  var IDs = [];
  for(var n in events){
    Logger.log(events[n].getTitle());
    var id = events[n].getId();
    if(IDs.indexOf(id)>-1){continue};
    try{
      cal.getEventSeriesById(id).deleteEventSeries();
      IDs.push(id);
      Logger.log(events[n].getTitle()+' was deleted,  ID = '+events[n].getId());
    }catch(err){Logger.log(events[n].getTitle()+' on '+Utilities.formatDate(events[n].getStartTime(),cal.getTimeZone(),'yyyy/MMM/dd')+" was not deleted,you don't have the right to modify it");}
  }
}
相关问题