4

我正在遍历事件电子表格并相应地修改我的日历。

我可以setRecurrence用来创建多日活动,但我不知道如何删除课程并将其转回单日活动。

知道这一点很重要,因为显然setRecurrence不止一次地应用于一个事件并不会替换/重新定义现有的重复,而是不断地在它上面添加额外的类。这可以防止简单的变通方法,例如应用 0 天的重复周期等。

我正在寻找event.removeRecurrence().

4

3 回答 3

2

此代码使用高级日历服务,您必须在脚本编辑器菜单中启用它:ressources/advanced Google Services ***

function ChangeEvent(){
  var calendarId = 'primary';
  var eventId = 'omv6###########e8jbs';
  var event = Calendar.Events.get(calendarId, eventId);
  Logger.log('old recurrence = '+event.recurrence);
  event.recurrence = '';
  Calendar.Events.patch(event,calendarId,eventId);
  Logger.log('new recurrence = '+event.recurrence);
}

在此处输入图像描述


编辑

按照你的评论,

请注意,高级日历 API 使用的 ID 略有不同,因为它不包括 @google.com。您应该在使用它之前简单地删除这最后一部分。

例子 :

[16-02-19 07:22:59:739 CET] ba4a1dub73uqsvhld3abh15f38@google.com
[16-02-19 07:22:59:740 CET] ba4a1dub73uqsvhld3abh15f38

使用一些字符串方法来获得我们需要的结果:

  Logger.log(event.getId());// event is the event you get using calendarApp
  var advancedID = event.getId().substring(0,event.getId().indexOf('@'));
  Logger.log(advancedID);// this ID is for advanced service
}

工作示例:

首先使用 calendarApp 创建一个 5 天重复的事件(所以我们处于您的真实状态)使用createEventRec()

检查日历上的事件是否符合预期

然后使用changeEvent()并检查结果

function createEventRec(){
  var cal = CalendarApp.getDefaultCalendar();
  var recurrence = CalendarApp.newRecurrence().addDailyRule().times(5);
  var event = cal.createEventSeries('Dinner with Mary', new Date(),new Date(new Date().getTime()+3600000), recurrence);
  Logger.log(event.getId());
  PropertiesService.getScriptProperties().setProperty('ID',event.getId());
}


function ChangeEventRecurrence(){
  var calendarId = 'primary';
  var ID = PropertiesService.getScriptProperties().getProperty('ID');
  var advancedID = ID.substring(0,ID.indexOf('@'));
  Logger.log(advancedID);
  var event = Calendar.Events.get(calendarId, advancedID);
  Logger.log('old recurrence = '+event.recurrence);
  event.recurrence = '';
  Calendar.Events.patch(event,calendarId,advancedID);
  Logger.log('new recurrence = '+event.recurrence);
}
于 2016-02-18T15:17:25.653 回答
0

这可以帮助您从 1 月 1 日到 1 月 10 日递归删除事件。

function delete_rec_events()
{
  //take care: Date function starts at 0 for the month (January=0)
  var fromDate = new Date(2018,0,1,0,0,0); //This is January 1, 2018
  var toDate = new Date(2018,0,10,0,0,0);   //This is January 10, 2018 at 00h00'00"

  var calendarName = '<Name of the Calendar>';    
  var calendar = CalendarApp.getCalendarsByName(calendarName)[0];
  var events = calendar.getEvents(fromDate, toDate);

  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');
  }
}
于 2018-06-09T12:25:55.000 回答
0
ev.removeAllReminders();
ev.deleteEvent();
于 2018-05-26T05:41:06.360 回答