我正在尝试获取一个重复事件的统一实例以及我在其中所做的更改,以反映该重复事件的所有实例。
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);
}
}
答案 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");}
}
}