Идентификатор события в неправильной строке, невозможно вызвать метод deleteEvent - PullRequest
0 голосов
/ 12 марта 2019

Я работаю над электронной таблицей для моего отдела, чтобы создавать, редактировать и удалять рабочие задания в календаре Google. Прошло довольно много времени с тех пор, как я занимался реальным кодированием, поэтому я много проб и ошибок обращался к ссылкам на скрипты и календари Google App. Наконец-то я дошел до того, что могу создавать события; однако, когда я тестирую свою функцию для удаления событий, я обнаружил, что событие во второй строке удаляет событие в третьей строке, и когда я пытаюсь удалить событие в третьей строке, я получаю «не могу вызвать метод deleteEvent» " ошибка. Я пробовал просматривать различные сайты для подобных ситуаций и не увенчался успехом. Буду признателен за любую помощь, которая поможет мне разобраться с ошибкой в ​​коде. Я также пытаюсь прикрепить ссылку на видео таблицы, поскольку скрипт запускается здесь

// Adds the custom menu to the active spreadsheet.
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [
    {
      name: "Create New Events",
      functionName: "createCalEvent"
    }, {
      name: "Update Existing Events",
      functionName: "updateCalEvent"
    }, {
      name: "Delete Existing Events",
      functionName: "deleteCalEvent"
    }
  ];
  spreadsheet.addMenu('Calendar Options', menuEntries);
}
// Event Status --> Assist in Triggering Update/Delete Functions
var delConfirmed = 'Event Created';
var updateConfirmed = 'Event Updated';
var eventCreate = 'Event Deleted';
function createCalEvent(){
  var calSheet = SpreadsheetApp.getActiveSheet();
  var dataRange = calSheet.getRange('$A2:$J');
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var calDate = row[1]; // COL A
    var calTitle = row[5]; // COL F
    var calGuests = row[6]; // COL G
    var calEType = row[7]; // COL H
    var calID = row[8]; // COL I
    var calStatus = row[9]; // COL J
// If there is a date and both the Event Type (Adjust/Delete) and Status are blank then Create the Calendar Event
    if(calDate !=='' && calEType == '' && calStatus == ''){
    var calEvent = CalendarApp
    .getCalendarById('envysion.com_kmfeb8mqmlv4j9k34l37q7fv3k@group.calendar.google.com')
    .createAllDayEvent(calTitle, new Date(calDate),{guests:calGuests});
      // Update the Status Column
    SpreadsheetApp.getActiveSheet().getRange(i+2, 10).setValue('Event Created');
    var newEvent = calEvent.getId();
      // Add the Event ID to the Event ID Column
    SpreadsheetApp.getActiveSheet().getRange(i+2,9).setValue(newEvent);

    Logger.log('Event ID: ' + newEvent + ' Title: ' + calEvent.getTitle() + 'Guests: ' + calEvent.getGuestList());
    }
  }
}
function deleteCalEvent()
{
  // Get range of dates to delete
  var fromDate = new Date(2019,3,1);
  var toDate = new Date(2019,4,1);
// Get Calendar Events
  var calendar = CalendarApp.getCalendarById('envysion.com_kmfeb8mqmlv4j9k34l37q7fv3k@group.calendar.google.com')
  var events = calendar.getEvents(fromDate, toDate);
// Get Spreadsheet Details
  var calSheet = SpreadsheetApp.getActiveSheet();
  var dataRange = calSheet.getRange('$A2:$J');
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var calDate = row[1];
    var calTitle = row[5];
    var calGuests = row[6];
    var calEType = row[7];
    var calID = row[8];
    var calStatus = row[9];
// Check if the Type column is set to Delete and if the event hasn't already been deleted
    if(calEType == 'Delete' && calStatus !== 'Event Deleted'){
      events[i].deleteEvent();
      SpreadsheetApp.getActiveSheet().getRange(i+2, 10).setValue('Event Deleted');
      SpreadsheetApp.getActiveSheet().getRange(i+2, 9).setValue('');
    }
  }
}

1 Ответ

0 голосов
/ 12 марта 2019

Кажется, тебе нужно сделать что-то подобное

if(calEType == 'Delete' && calStatus !== 'Event Deleted'){
  var _event_ = calendar.getEventById(calStatus);
  if(_event_){
    _event_.deleteEvent();
    SpreadsheetApp.getActiveSheet().getRange(i+2, 10).setValue('Event Deleted');
    SpreadsheetApp.getActiveSheet().getRange(i+2, 9).setValue('');
  }
}

Это потому, что у вас может быть разное количество событий в календаре и на листе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...