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



我正在使用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() 删除事件的方法,但我对如何确定要删除的正确事件感到困惑。如何将当前事件的日期和时间与已存在的日期和时间相匹配,以便可以覆盖它?

您需要先调用 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存储在任何地方。如果你这样做了,那就更好了,你会确定你正在替换正确的事件。

有效!这是我完成的代码,用于添加事件并删除同时发生的事件。

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

最新更新