Нахождение события в календаре и, если нет, создание нового события - PullRequest
0 голосов
/ 14 января 2020

Я создаю приложение, которое добавляет события в календарь из электронной таблицы, а затем обновляет события, если электронная таблица изменяется. Прямо сейчас мой код просто удаляет все существующие события и добавляет новое для каждой записи в электронной таблице, но иногда мой код выдает ошибки, потому что это означает, что я добавляю и удаляю слишком много записей календаря. (Да, я использую утилиту сна. Иногда она все равно падает.)

Кажется, что более эффективный способ сделать это - проверить, существует ли событие; если это так, обновите любые изменения в дате; а если нет, то создайте новое событие. Но я не могу понять, как связать два списка друг с другом. Если я скажу l oop по всем событиям в электронной таблице, а внутри это l oop по каждому событию в календаре, чтобы найти совпадение, и если нет совпадения для создания нового события, это выглядит как это создаст новое событие для каждого несоответствующего элемента, который существует в календаре для каждой строки электронной таблицы.

Вот базовый код c:

function UpdatePrintCalendar() {
 SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/16U6am5GvgWxh0gcRS8FWf9ws7BxaiJU5KOnSo7kOUlg/edit?usp=sharing&key=AIzaSyBe4KN8M-HhMUbN0UcAao7Xm4rIMgOOC6g")
  .getSheetByName("PD Hed List").sort(3).sort(4);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cols = sheet.getLastColumn();
  var endofthings = sheet.getLastRow();
  var stories = sheet.getRange(1,1, endofthings, cols).getValues();
  var rownum = stories.length
  var printCal = CalendarApp.getCalendarById("4d1aq2jtt795hfemn7i76cfi30@group.calendar.google.com");
  var fromDate = new Date(2019,11,1,0,0,0);
  var toDate = new Date(2020,3,31,0,0,0);
  var events = printCal.getEvents(fromDate, toDate);
  for(var i=0; i<events.length;i++){ /* Clear the calendar. This prevents duplicates. */
      var ev = events[i];
      ev.deleteEvent();
    }



  for (x=0; x<stories.length; x++) {
    if (x % 10 == 0) { Utilities.sleep(3000); }
      var story = stories[x];
      var onlinedate = story[1];
      var printdate = story[2];
      var section = story[5]; 
      var slug = story[6];

      var hed = {
          'location': section,
          'description': slug,
      }
      if (Boolean(printdate)) {
        if (slug) {
          printCal.createAllDayEvent(slug, new Date(printdate));   
        }
      }

  }

}


}

1 Ответ

0 голосов
/ 28 января 2020

Вы можете попробовать Array.prototype.filter ()

Посмотрите, как использовать его на example1 и example2

Что бы я сделал в вашем случае:

  1. список всех событий календаря
  2. поиск идентификатора и заголовка
  3. список заголовков в электронной таблице
  4. найти то, что не соответствует
  5. добавить пропущенные события календаря
  6. обновить электронную таблицу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...