如何使用Apps脚本检查重复发生的事件是否存在冲突?

时间:2018-07-22 20:04:19

标签: google-apps-script google-sheets google-calendar-api recurring-events

我想编写一个Google Apps脚本,以检查重复发生的事件是否存在任何冲突,然后再将其从Google表格发送到Google日历。

我可以使用以下方法查看第一天的约会:

var ConTimes = calendarAll.getEvents(startDate, endDate, {search: roomNumber});
Logger.log('Conflicting Times: ' + ConTimes.length);
Logger.log('Conflicting dates: ' + ConTimes);

如果长度大于0,则说明存在冲突;如果长度大于0,则表明存在冲突。但是,此脚本不会检查任何重复发生的事件。

如果有一个简单的脚本可以搜索带有特定单词的所有Calendar事件,然后返回当前Calendar事件和我想安排的重复事件之间的重叠事件数,那就太好了。我想这个理想的脚本将类似于我用来添加重复事件的脚本:

var recurrence = CalendarApp.newRecurrence().addWeeklyRule().onlyOnWeekdays(weekdays).times(times);  
var eventSeries = calendarSingle.createEventSeries(newEventTitle, startDate, endDate, recurrence);

在电子表格中,我有以下几列:例如行数据:

  • 房间数:4000;
  • EventName:Geology101;
  • 开始日期时间:7/23/2018 12:00:00;
  • 结束日期时间:7/23/2018 14:00:00;
  • RecDaysPerWeek:星期一,星期三,星期五;
  • NumberOfWeeks:4。

我确定我可以写一个长脚本,该脚本将为我提供接下来4周内星期一,星期三和星期五的所有日期,然后检查每个日期是否有冲突,但这很昂贵。有没有人知道Google是否编写了用于搜索重复发生的代码?

谢谢。 +++++++++一些澄清说明+++++++++++ 我不确定我是否足够清楚地解释了这一点,所以这里是一个示例,说明如何编写并生成昂贵的代码:

var startDate=Mon Jul 23 2018 07:22:11 GMT-0400 (EDT);
var endDate=Mon Jul 23 2018 08:22:11 GMT-0400 (EDT);
var times=4;
var recurringDays="MONDAY, WEDNESDAY, FRIDAY";
var room = "5071";

if (recurringDays == "MONDAY, WEDNESDAY, FRIDAY") {

for (var i = 1; i < times; i++)  {   
  //Note: this assumes the first weekday and the start date are the same
  // Then what is the date of the first Monday
  var MondayStartDate = startDate;
  var MondayEndDate = endDate;  
       var ConTimes = calendarAll.getEvents(startDate, endDate, {search: room});
            Logger.log('Conflicting Times: ' + ConTimes.length);   
  //and what are the dates of the first Wednesday
  var WednesdayStartDate = startDate.setDate(startDate.getDate()+2);
  var WednesdayEndDate = endDate.setDate(endDate.getDate()+2);
       var ConTimes = calendarAll.getEvents(startDate, endDate, {search: room});
            Logger.log('Conflicting Times: ' + ConTimes.length); 
  //and what is the date of the first Friday
  var FridayStartDate = startDate.setDate(startDate.getDate()+2);
  var FridayEndDate = endDate.setDate(endDate.getDate()+2); 
       var ConTimes = calendarAll.getEvents(startDate, endDate, {search: room});
            Logger.log('Conflicting Times: ' + ConTimes.length); 
  var     Back2MonStartDate = startDate.setDate(startDate.getDate()+3);
  var     Back2MonEndDate = endDate.setDate(endDate.getDate()+3);      
 } }

该脚本生成的日志如下所示:

  • [18-07-23 13:36:44:551 EDT]次:5
  • [18-07-23 13:36:44:552 EDT]室:5071室
  • [18-07-23 13:36:44:634 EDT]冲突时间:2
  • [18-07-23 13:36:44:682 EDT]冲突时间:2
  • [18-07-23 13:36:44:746 EDT]冲突时间:2
  • [18-07-23 13:36:44:806 EDT]冲突时间:2
  • [18-07-23 13:36:44:878 EDT]冲突时间:2
  • [18-07-23 13:36:44:948 EDT]冲突时间:2
  • [18-07-23 13:36:45:017 EDT]冲突时间:2
  • [18-07-23 13:36:45:091 EDT]冲突时间:2
  • [18-07-23 13:36:45:158 EDT]冲突时间:2
  • [18-07-23 13:36:45:234 EDT]冲突时间:2
  • [18-07-23 13:36:45:322 EDT]冲突时间:2
  • [18-07-23 13:36:45:371 EDT]冲突时间:2

我必须为每一天的组合(例如“ MONDAY,WEDNESDAY,FRIDAY”)编写for循环脚本,并每天运行getEvents搜索。

实际上,我可以从日志文件中找到日历中哪一天的日期有冲突(例如,第三个“ 2”是开始日期之后的第一个星期五。

如果没有明显更短的Google Apps脚本会减少getEvents搜索的次数,那么我想这个脚本就是我需要编写的。

感谢您的帮助。

0 个答案:

没有答案