首页 > 解决方案 > 将假期周数组复制到新日历中

问题描述

更新了代码,下面有新的麻烦。

我正在改进此脚本以将完整的假期周复制到新日历中。

当目标日历中不存在其他事件时,它现在可以很好地与任何数组成员一起使用:

 if ( eventToCheck.length == 0 ) {
            copyHoliday = true;
          }

在此处输入图像描述

但是当存在其他事件时,什么也不会发生:

for (var j = 0;  eventToCheck.length > 0; j++) {
  if ( eventToCheck[j].getTitle() !== holidayArray[0][1] ) {
    copyHoliday = true;
  }

在此处输入图像描述 在此处输入图像描述

TypeError:无法读取未定义的属性“getTitle”:我认为 eventToCheck 是所有现有事件的数组,eventToCheck[j] 应该是第 j 个事件,因此应该有一个标题。这是错的吗?

完整代码:

 function copy5yHoliday() {
  var calendarSource = CalendarApp.getCalendarById('de.german#holiday@group.v.calendar.google.com');
  var calendarDestination = CalendarApp.getCalendarById('4***************4@group.calendar.google.com');
  var start = new Date('2021', '0', '1');
  // Sometimes, years are not 365 days, so better spell it out
  var end = new Date('2021', '11', '31');
  var eventToCopy = calendarSource.getEvents(start, end);
  //var eventToCheck = calendarDestination.getEvents(start, end);   //check if already inserted
  var easterArr    = ['Karfreitag','Karwoche test1'];              //  0,0   0,1
  var christmasArr = ['Heiligabend','Weihnachtswoche'];             //  1,0   1,1
  var newYearArr   = ['Neujahrstag','Neujahrswoche'];               //  2,0   2,1
  var holidayArray = [easterArr, christmasArr, newYearArr];
  var copyHoliday;
  for (var i in eventToCopy) {
    if (eventToCopy[i].getTitle() == holidayArray[0][0]) {
      {
        var eventWeekDay = eventToCopy[i].getAllDayStartDate().getDay();    //get weekday to calculate circumfering week
        var toMonday = eventWeekDay - 1;
        var toSunday = 7 - eventWeekDay;
        var startDate = eventToCopy[i].getAllDayStartDate();
        startDate.setDate(startDate.getDate() - toMonday)
        var endDate = eventToCopy[i].getAllDayEndDate();
        endDate.setDate(endDate.getDate() + toSunday);
        var eventToCheck = calendarDestination.getEvents(startDate, endDate);   //get all events in this period
        if ( eventToCheck.length == 0 ) {
            copyHoliday = true;
          }
        for (var j = 0;  eventToCheck.length > 0; j++) {
          if ( eventToCheck[j].getTitle() !== holidayArray[0][1] ) {
            copyHoliday = true;
          }
          else { break; }
        }
        if (copyHoliday == true) {
          calendarDestination.createAllDayEvent(holidayArray[0][1], startDate, endDate);
        }
        return;
      }
    }  
  }
}

当然下一步是扩展 FOR 循环,以便代码自动通过数组,我只想先解决这个问题。

感谢您的宝贵帮助!

标签: for-loopgoogle-apps-scriptgoogle-calendar-api

解决方案


推荐阅读