AppScript:Google 日历删除事件

AppScript: Google Calendar Remove Events

我有以下代码将我的活动从 Google Sheet 上传到 Google 日历。此代码根据 E 列(状态)x[4] 中的值搜索需要同步到日历的行。标记为 Pending SchedulePending Removal 的事件将同步到日历,然后将 sheet 中的相应行更新为 ScheduledRemoved

这段代码在安排事件方面运行得很好。但是,当涉及到删除事件时,它仅在数据的第一行被标记为要删除时才有效,但在其他行上则无效。它给了我 TypeError: Cannot read property 'deleteEvent' of undefined 并且当我调查 deleteEvent 对象时显示为 CalendarEvent.

似乎我编写 if() 函数的方式在某种程度上是不合适的,并且 else if() 没有评估整个数据。我尝试用另一个 if() 替换 else if() 但收到相同的错误。

function calendarSync2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName('Test Sheet')
  var settingsSheet = ss.getSheetByName('Calendar Settings');
  var calendarId = settingsSheet.getRange('B2').getValues();
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var eventArray = dataSheet.getRange('A2:I').getDisplayValues();

  for (x = 0; x < eventArray.length; x++) {

    var event = eventArray[x];
    var eventName = event[1];
    var eventDate = new Date(event[0]);
    var timeZone = event[5];
    var startTime = new Date(`${event[0]} ${event[2]} ${timeZone}`); ///Used Object literals of `` combined with ${}
    var endTime = new Date(`${event[0]} ${event[3]} ${timeZone}`);
    var status = event[4]; // Used in the following comparison expression instead of filter

    if (status === 'Pending Schedule') { /// === undertakes strict comparison
      var exisEvents = eventCal.getEvents(startTime, endTime, {search: eventName});  // prevents creation of duplicates
      if (exisEvents.length == 0) {
        Logger.log(`timed ${eventName} scheduled for: ${startTime} till ${endTime}`);
        eventCal.createEvent(eventName, startTime, endTime);
        eventArray[x][4] = "Scheduled"; // Updates the status
      }
    } else if (status === 'Pending Removal') {
      Logger.log(`${eventName} at ${eventDate} REMOVED`)
      var returnedEvent = eventCal.getEvents(startTime, endTime, {search: eventName});
      var toRemove = returnedEvent[x];
      Logger.log(`returnedEvent is: ${returnedEvent}`);
      toRemove.deleteEvent();
      eventArray[x][4] = "Removed";
    }
  }
  dataSheet.getRange('A2:I').setValues(eventArray); // Overwrite the source data with the modified array
}

因此,经过一些挖掘,我认为我需要创建另一个循环来删除事件。所以下面的代码:

else if (status === 'Pending Removal') {
      var returnedEvent = eventCal.getEvents(startTime, endTime, {search: eventName});
      var toRemove = returnedEvent[x];
      toRemove.deleteEvent();
      eventArray[x][4] = "Removed";
    }

应改为:

else if (status === 'Pending Removal') {
      var returnedEvents = eventCal.getEventsForDay(eventDate,
{search: eventName});
      for (i = 0; i < returnedEvents.length; i++) {
        var toRemove = returnedEvents[i];
        toRemove.deleteEvent();
        eventArray[x][4] = 'Removed';
      }
    }