Javascript 查找事件是否在日历中,如果不在日历中,则创建新事件

Javascript 查找事件是否在日历中,如果不在日历中,则创建新事件,javascript,google-apps-script,google-sheets,google-calendar-api,Javascript,Google Apps Script,Google Sheets,Google Calendar Api,我正在制作一个应用程序,将事件从电子表格添加到日历中,然后在电子表格更改时更新事件。现在,我的代码只是删除所有现有的事件,并为电子表格中的每个条目添加一个新的事件,但有时我的代码会出错,因为这意味着我添加和删除了太多的日历条目。(是的,我正在使用sleep实用程序。有时它会崩溃。) 这样做似乎更有效的方法是检查事件是否已经存在;如果有,更新日期的任何更改;如果没有,则创建一个新事件。但我不太明白如何将这两个列表相互循环。如果我告诉它循环电子表格中的所有事件,并在其中循环日历中的每个事件以查找匹配

我正在制作一个应用程序,将事件从电子表格添加到日历中,然后在电子表格更改时更新事件。现在,我的代码只是删除所有现有的事件,并为电子表格中的每个条目添加一个新的事件,但有时我的代码会出错,因为这意味着我添加和删除了太多的日历条目。(是的,我正在使用sleep实用程序。有时它会崩溃。)

这样做似乎更有效的方法是检查事件是否已经存在;如果有,更新日期的任何更改;如果没有,则创建一个新事件。但我不太明白如何将这两个列表相互循环。如果我告诉它循环电子表格中的所有事件,并在其中循环日历中的每个事件以查找匹配项,如果没有匹配项来创建新事件,它似乎会为电子表格中每一行的日历中存在的每个不匹配项创建一个新事件

以下是基本代码:

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));   
        }
      }

  }

}


}
函数UpdatePrintCalendar(){
SpreadsheetApp.openByUrl(“https://docs.google.com/spreadsheets/d/16U6am5GvgWxh0gcRS8FWf9ws7BxaiJU5KOnSo7kOUlg/edit?usp=sharing&key=AIzaSyBe4KN8M-HhMUbN0UcAao7Xm4rIMgOOC6g”)
.getSheetByName(“PD列表”).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=新日期(2019,11,1,0,0,0);
var toDate=新日期(2020,3,31,0,0);
var events=printCal.getEvents(fromDate,toDate);
对于(var i=0;i您可以尝试

看看如何在和上使用它

在你的情况下,我会怎么做:

  • 列出所有日历事件
  • 查找id和标题
  • 在电子表格中列出标题
  • 找出不匹配的内容
  • 添加缺少的日历事件
  • 更新电子表格

  • 如果您的电子表格有事件id,您可以按id搜索所有事件,不存在的事件将被替换。