Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌日历脚本:删除重复_Javascript_Google Apps Script_Google Calendar Api_Google Calendar Recurring Events - Fatal编程技术网

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');
  }
}