Javascript 谷歌日历脚本:删除重复
我正在迭代事件的电子表格,并相应地修改我的日历 我可以使用Javascript 谷歌日历脚本:删除重复,javascript,google-apps-script,google-calendar-api,google-calendar-recurring-events,Javascript,Google Apps Script,Google Calendar Api,Google Calendar Recurring Events,我正在迭代事件的电子表格,并相应地修改我的日历 我可以使用setRecurrence创建多日事件,但我不知道如何删除该类并将其恢复为单日事件 知道这一点很重要,因为显然,对事件多次应用setRecurrence不会替换/重新定义现有的重复,而是会在其上附加额外的类。这可以防止简单的解决方法,例如应用0天的重复性等 我正在寻找与event.removeRecurrence()等效的事件。此代码使用高级日历服务,您必须在脚本编辑器菜单中启用它:resources/advanced Google Se
setRecurrence
创建多日事件,但我不知道如何删除该类并将其恢复为单日事件
知道这一点很重要,因为显然,对事件多次应用setRecurrence
不会替换/重新定义现有的重复,而是会在其上附加额外的类。这可以防止简单的解决方法,例如应用0天的重复性等
我正在寻找与
event.removeRecurrence()
等效的事件。此代码使用高级日历服务,您必须在脚本编辑器菜单中启用它:resources/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()
在日历上检查事件是否符合预期
然后使用changevent()
并检查结果
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);
}
这将帮助您从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');
}
}
函数删除记录事件()
{
//注意:该月的日期函数从0开始(一月=0)
var fromDate=新日期(2018,0,1,0,0);//这是2018年1月1日
var toDate=新日期(2018,0,10,0,0);//这是2018年1月10日00点00分”
var calendarName='';
var calendar=CalendarApp.getCalendarsByName(calendarName)[0];
var events=calendar.getEvents(fromDate,toDate);
对于(var i=0;我非常感谢您的回答。我现在运行了高级日历服务,但是我使用我的事件ID(看起来像xxx@google.com).我的日历ID(xxx@group.calendar.google.com)工作正常。请参见编辑。高级服务的Id略有不同。再次感谢。我已经尝试过了,但不幸的是,我仍然收到一个错误:异常:找不到。我的事件Id现在看起来像:k7oh14d7*******************lchssj2g。我已经检查过,事件确实存在。我添加了一个工作演示,以便您可以看到它是如何工作的。例如purpose我将ID存储在scriptProperties中,但当然您也可以将其存储在电子表格中。非常感谢您,直到今天我才知道高级日历API的存在!
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');
}
}