繁体   English   中英

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

如果背景更新为深绿色 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 列中的一个单元格从深黄色更改为深绿色来更新电子表格时,该事件仍保留在我的日历上。 关于我缺少什么的任何想法? 谢谢。

解决方案:

比较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()

或上述任何其他方法。

参考:

比较 JavaScript 中的日期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM