我已经编写了一个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
}
答案 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)
注意:
您将在以下问题中找到有关的更多信息: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。