Google 日历脚本:删除重复
Google Calendar script: remove recurrence
我正在遍历事件电子表格并相应地修改我的日历。
我可以使用 setRecurrence
创建多日活动,但我不知道如何删除 class 并将其变回单日活动。
知道这一点很重要,因为显然不止一次将 setRecurrence
应用于一个事件并不会 replace/redefine 现有的重复,而是不断地在其上添加额外的 class。这会阻止简单的解决方法,例如应用 0 天的重复等。
我正在寻找 event.removeRecurrence()
的等效项。
此代码使用高级日历服务,您必须在脚本编辑器菜单中启用它:ressources/advanced Google 服务 ***
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
}
工作示例:
首先使用 createEventRec()
使用 calendarApp 创建一个 5 天重复的事件(因此我们处于您的真实状态)
在日历上查看活动是否符合预期
然后使用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);
}
ev.removeAllReminders();
ev.deleteEvent();
这可以帮助您递归删除从 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');
}
}
我正在遍历事件电子表格并相应地修改我的日历。
我可以使用 setRecurrence
创建多日活动,但我不知道如何删除 class 并将其变回单日活动。
知道这一点很重要,因为显然不止一次将 setRecurrence
应用于一个事件并不会 replace/redefine 现有的重复,而是不断地在其上添加额外的 class。这会阻止简单的解决方法,例如应用 0 天的重复等。
我正在寻找 event.removeRecurrence()
的等效项。
此代码使用高级日历服务,您必须在脚本编辑器菜单中启用它:ressources/advanced Google 服务 ***
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
}
工作示例:
首先使用 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);
}
ev.removeAllReminders();
ev.deleteEvent();
这可以帮助您递归删除从 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');
}
}