Google日历脚本:删除重复发生 [英] Google Calendar script: remove recurrence
问题描述
我正在迭代事件的电子表格并相应地修改我的日历。
I'm iterating through a spreadsheet of events and modifying my calendar accordingly.
我可以使用 setRecurrence
来创建多日活动,但我无法弄清楚如何删除上课并将其变回为期一天的活动。
I can use setRecurrence
to create multi-day events, but I can't figure out how to remove the class and turn it back into a single-day event.
重要的是要知道,因为显然不止一次地将 setRecurrence
应用于事件不会替换/重新定义现有的重复,但继续在其上添加其他类。这可以防止简单的解决方法,例如应用0天的重复等等。
It's important to know because evidently applying setRecurrence
to an event more than once does not replace/redefine the existing recurrence, but keeps tacking additional classes onto it. This prevents simple workarounds, such as applying a recurrence of 0 days, etc.
我正在寻找等价的 event.removeRecurrence()
。
推荐答案
此代码使用高级日历服务,您必须在脚本编辑器菜单中启用它:ressources / advanced Google Services ***
This code uses advanced Calendar service, you have to enable it in the script editor menu : 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。您应该在使用之前删除最后一部分。
Please note that the ID used by the advanced calendar API is slightly different as it does not include the @google.com. You should simply remove this last part before using it.
示例:
[16-02-19 07:22:59:739 CET] ba4a1dub73uqsvhld3abh15f38@google.com
[16-02-19 07:22:59:740 CET] ba4a1dub73uqsvhld3abh15f38
使用一些字符串方法来获得我们需要的结果:
Use some string methods to get the result we need :
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()
在日历上检查事件是否符合预期
Check on the calendar that the event is as expected
然后使用 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);
}
这篇关于Google日历脚本:删除重复发生的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!