通过脚本创建新事件时覆盖现有的Google日历事件

时间:2015-04-20 00:50:09

标签: javascript google-calendar-api

我正在使用Google表单根据Google日历上的公开活动安排约会。我已经关闭了日历上的时间段,如果事件的标题是“打开”,那么时间段可用于创建事件。我接下来想知道是否可以使用创建的新约会覆盖和删除现有的打开事件。

以下是我用来将事件推送到我的日历的代码,因为它们是以以下形式创建的:

var calendarID = "";
var startDtID = 5;
var endDtID = 5; // Column containing date/time
var nameID = 2; // Column containing name
var emailID = 3; // Column containing email
var phoneID = 4; // Column containing phone
var formTimeStampID = 1; // column containing timestamp

function getLatestAndSubmitToCalendar() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var lr = rows.getLastRow();

  var startDt = sheet.getRange(lr,startDtID,1,1).getValue();
  var endDt = sheet.getRange(lr,endDtID,1,1).getValue(); // remove hour and minute for the start/end time
  var desc = "Comments :"+sheet.getRange(lr,phoneID,1,1).getValue(); // set comments as description, add in timestamp and submission
  var title = sheet.getRange(lr,nameID,1,1).getValue()+" - "+sheet.getRange(lr,emailID,1,1).getValue(); // create title using name and email

    createEvent(calendarID,title,startDt,endDt,desc);
}; // run create event function

function createEvent(calendarId,title,startDt,endDt,desc) {
  var cal = CalendarApp.getCalendarById(calendarID);
  var start = new Date(startDt);
  var end = new Date(endDt);

  var event = cal.createEvent(title, start, end, {
      description : desc
  }); // set options for event
};

CalendarEvent类有一个通过deleteEvent()删除事件的方法,但我对如何确定要删除的正确事件感到困惑。如何将当前事件的日期和时间与已存在的事件的日期和时间相匹配,以便我可以覆盖它?

2 个答案:

答案 0 :(得分:2)

首先需要调用calendar.getEvents(),然后遍历要删除的事件,并在每个事件上调用.delete()。以下是API链接:https://developers.google.com/apps-script/reference/calendar/calendar#getEvents%28Date,Date,Object%29

这样的事情:

var now = new Date();
var twoHoursFromNow = new Date(now.getTime() + (2 * 60 * 60 * 1000));
var events = CalendarApp.getDefaultCalendar().getEvents(now, twoHoursFromNow,
    {search: 'meeting'});

for(int i = 0; i < events.length; i++){
    if this is the right event (compare title, times, etc?){
        events[i].deleteEvent();
    }
}

在这种情况下,您可能希望比较说明。另请注意,您可以将选项传递给getEvents调用;在搜索过程中您可以使用的一个是搜索参数,就像我上面所做的那样。它会过滤该文本上返回的事件。

编辑:理想情况下,您需要使用此功能:https://developers.google.com/apps-script/reference/calendar/calendar#getEventSeriesById%28String%29

通过ID获取事件;我回答的假设是你没有将ID存储在任何地方。如果你做得更好,你就会确定你正在取代正确的事件。

答案 1 :(得分:1)

有效!这是我完成的添加事件和删除同时发生的事件的完整代码。

function createEvent(calendarId,title,startDt,endDt,desc) {
  var cal = CalendarApp.getCalendarById(calendarID);
  var start = new Date(startDt);
  var end = new Date(endDt);

  var event = cal.createEvent(title, start, end, {
    description : desc
  });

    var events = cal.getEvents(start, end, {
    search: 'open'
  });  

  for (i in events){
    events[i].deleteEvent();
  }
};