如何修改事件系列的特定实例

时间:2016-03-20 16:40:09

标签: google-apps-script calendar google-calendar-api google-calendar-recurring-events

假设我创建的周期性事件从周一上午9点​​开始,到上午11点结束,此事件每天重复3天。 现在我希望(在我使用重复创建事件之后)在周二更改事件的开始时间,同时保持其他事件不变,我该怎么办?

我可以使用高级日历API轻松获取此eventSeries的重复规则,它返回类似

的内容
RRULE:FREQ=DAILY;COUNT=3 

可以随意修改此规则以更改所有事件(我也可以使用patch更新事件,但不仅仅针对单个事件。 我尝试了API tryout来获取此eventSeries的每个实例,我确实可以看到每个开始和结束时间(*见下文),但我没有找到任何方法来使用Google Apps脚本中的Calendar API。

我没有找到修改特定实例的方法,即写回修改后的值。

由于我可以在日历网页界面中手动执行此操作,我想我应该可以使用脚本来完成此操作,但我真的不知道如何。

我用来获取事件参数的代码非常简单:

  ...
  for(var n = 1 ; n < data.length ; n++){
    if(data[n][9] == ''){continue};
    var advancedID = data[n][9].substring(0,data[n][9].indexOf('@'));
    Logger.log(advancedID+'\n');
    ChangeEventRecurrence(calID,advancedID);
  }
}

function ChangeEventRecurrence(calID,advancedID){
  var event = Calendar.Events.get(calID, advancedID);
  Logger.log(event.recurrence+'\n'+JSON.stringify(event));
  // here I should be able to get all the instances of this eventSeries and change them if needed
 }

以下是我使用API​​试用版获得的实例的捕获:

enter image description here

1 个答案:

答案 0 :(得分:0)

使用CalendarApp,只需指定日期范围以查找单个事件并循环显示结果,然后使用.setTime()

var cal = CalendarApp.getCalendarsByName('<YOUR_CAL>')[0];
var events = cal.getEvents(new Date("April 5, 2016 08:00:00 AM"), new Date("April 5, 2016 11:30:00 AM"));
events.forEach( function(e) {
  //var e = events[0];
  //if ( e.getTitle() === 'Your Title' ) 
  e.setTime(new Date("April 5, 2016 11:00:00 AM"), new Date("April 5, 2016 01:00:00 PM"));
});

我无法判断您的特定实例&#34;仅表示单个事件或每个星期二的事件,或者您是否有理由在这种情况下使用高级日历API。