Google Apps脚本:如何检查日历事件是否已被标记为已手动删除

时间:2018-01-05 23:43:20

标签: javascript google-apps-script google-calendar-api

我已经编写了一个Google Apps脚本,可将电子表格中保存的事件添加到Google日历中。每个事件都存储日历事件的ID,以便在电子表格中的事件被修改时可以更新它。事件仍然可以在日历中手动删除,因此我希望脚本检测到这一点并重新创建事件。不幸的是,我在calendar对象上调用null时无法检查getEventById(...),因为即使删除此函数,该函数似乎也会返回一个有效的calendar对象。

CalendarEvent API文档似乎没有指向检查事件是否已通过UI /手动删除的方法。有没有办法通过Google Apps API访问此媒体资源?

即使永久删除已删除的事件也无法解决问题,但它会阻止对返回的event对象进行修改。

我可以使用什么来检查事件(仍然存在)是否已被删除"?我唯一能想到的就是get/setTag()对象的CalendarEvent方法。

或者,this问题看起来很相似,但感觉应该有比搜索已删除事件列表更好的方法,而且我不确定这会解决ID问题字符串返回已经永久"的有效事件删除。

实施例

var calendarId = "abc123@group.calendar.google.com"
var calendar = CalendarApp.getCalendarById(calendarId);

var event = calendar.createEvent(...);

// Event is then deleted manually in calendar but 
// ID has been saved in spreadsheet (or elsewhere)

if (calendar.getEventById("the-deleted-event-id") == null) {
    // Create the event (This is never reached)
} else {
    // Update the event
}

4 个答案:

答案 0 :(得分:0)

我花了很多时间解决这个问题,我无法理解为什么没有更好的方法直接通过CalendarApp解决。 您需要的是这样:

var eventId = "5qif5n15v46c0jt5gq20a39dqu@google.com".split("@")[0];
if(Calendar.Events.get("yourCalendarId", eventId).status === "cancelled")
        CODE://what to do if event was deleted (manually)

注意:

  1. 由于API v3.0仅将@之前的部分用作eventid,因此您需要 分割(休息)
  2. 您需要首先激活Calendar API v3.0。

您将在以下问题中找到有关的更多信息:Checking a Google Calendar Event's Existence

答案 1 :(得分:0)

我发现,执行此操作的最佳方法是在有关事件的时间段内向event询问事件时,是否包括有关的calendar

var event = calendar.getEventById(eventId);
var events = calendar.getEvents(event.getStartTime(),event.getEndTime());
var isEventDeleted = events.some((event) => event.getId() == eventId);

使用的方法:

https://developers.google.com/apps-script/reference/calendar/calendar#getEventById(String) https://developers.google.com/apps-script/reference/calendar/calendar#geteventsstarttime,-endtime https://developers.google.com/apps-script/reference/calendar/calendar-event#getstarttime https://developers.google.com/apps-script/reference/calendar/calendar-event#getendtime https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

答案 2 :(得分:0)

另一种解决方案是仅搜索尚未删除的事件,这将导致找不到已删除的事件。

let result = Calendar.Events.list(<Calendar_ID>, {showDeleted: false});

答案 3 :(得分:-1)

我发现更简单的方法是检查 Return 是否为空。 空 = 未找到事件

https://developers.google.com/apps-script/reference/calendar/calendar#geteventbyidicalid

CalendarEvent — 具有给定 ID 的事件,如果事件不存在或用户无法访问,则为 null。