Google 不会使用 Apps 脚本 deleteEvent() 方法删除日历事件

Google Calendar event will not delete with Apps Script deleteEvent() method

我创建了一个脚本,它循环遍历每个 google sheet 行并创建一个日历事件,如果第 5 列中单元格的背景是 = 深黄色 1。

function CheckDocument() {
 var ss = SpreadsheetApp.getActiveSpreadsheet()
 var sheet1=ss.getSheetByName('Sheet1');
 var tasksApproaching = ""; // list of items of approaching overdue tasks
 var tasksOverdue = ""; // list of items that are overdue
 var tasksApproachingArr = []; // array of approaching overdue tasks
 var tasksOverdueArr = []; // array of overdue tasks
 var timeRemaining = []; // array of time values (today - refreshdate) example (3/5/21 - 3/2/21 = 3 days)
 var calendarID = sheet2.getRange(6,2).getValue(); //obtain calendarID
 var eventCal = CalendarApp.getCalendarById(calendarID); //set object of calendarID

for (var i=3;i<n+1;i++){ //loop through sheet, add tasks to arrays if it meets conditional formatting color criteria
        var taskRefreshDate = sheet1.getRange(i,5).getValue();
        var background = sheet1.getRange(i,5).getBackground();
        if (background == "#f1c232"){ //dark yellow 1 background color
            calendarTask = sheet1.getRange(i,1).getValue(); //set title for calendar event creation
            tasksApproachingArr.push(sheet1.getRange(i,1).getValue()); //send task name to array
            timeRemainingMils = taskRefreshDate.getTime() - today; //Milliseconds of time between refresh date and today
            timeRemaining.push(Math.floor(timeRemainingMils/(86400 * 1000))+1); //Convert milliseconds to # days
            if(sheet1.getRange(i,9).getValue()==""){
               eventCal.createAllDayEvent(calendarTask, taskRefreshDate, {
                 description: calendarTask
               });
               sheet1.getRange(i,9).setValue("Yes");
            }
            } else if(background == "#e06666") { //light red 1 background
              tasksOverdueArr.push(sheet1.getRange(i,1).getValue());
            } else if(sheet1.getRange(i,9).getValue()=="Yes"){
              sheet1.getRange(i,9).setValue("");
            }
        }
}

我的 objective 是在背景更新为深绿色时从我的日历中删除这些事件 1。

var startTime = new Date(2021,1,1,0,0,0);
  var endTime = new Date(2021,12,31,0,0,0);
  var events = eventCal.getEvents(startTime,endTime);
  for (var e=0; e<events.length;e++){
        eventStartTime = events[e].getStartTime();
        eventTitle = events[e].getTitle();
        for (var i=3;i<n+1;i++){
          if((eventStartTime == sheet1.getRange(i,5).getValue()) && (eventTitle == sheet1.getRange(i,1).getValue()) && (sheet1.getRange(i,5).getBackground()=="#6aa84f")){
              events[e].deleteEvent();
          }   
        }
    }

我可以成功创建日历事件,但是,当我通过将第 5 列中的一个单元格从深黄色更改为深绿色来更新传播时sheet,事件仍然保留在我的日历上。关于我缺少什么的任何想法?谢谢

解决方案:

比较 Date 对象相等性的一些好方法是以下方法之一:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

因此在您的代码中,比较可能是:

eventStartTime.getTime() == sheet1.getRange(i,5).getValue().getTime()

或上述任何其他方法。

参考:

Compare Dates in JavaScript