2014-09-28 36 views
0

我試圖獲得一個統一重複事件的實例以及我在該事件中所做的更改以反映該重複事件的所有實例。獲取重複事件和非重複事件的單一統一實例

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

我寫了一個腳本來解決那種問題,看到這個頁面:https://sites.google.com/site/scriptsexamples/new-connectors-對谷歌服務/日曆/ calendar_edit_example – 2014-09-28 08:07:49

回答

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