Google Apps脚本日历服务:如何使用PropertiesService存储和检索CalendarEvent?

问题描述 投票:0回答:1

我指的是this question

作为此代码

var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var events = cal.getEvents(startTime, endTime);
Logger.log(events);
var sp = PropertiesService.getScriptProperties();
sp.setProperty("events", JSON.stringify(events));
events = JSON.parse(sp.getProperty("events"));
Logger.log(events);

返回:

Info [CalendarEvent, CalendarEvent, CalendarEvent, CalendarEvent, CalendarEvent]
Info [{}, {}, {}, {}, {}]

如何使用PropertiesService存储和检索CalendarEvent(不仅是ID)?

javascript google-apps-script google-calendar-api
1个回答
1
投票

工作流程:

我认为最好的选择是执行以下操作:

  • 从先前处理的事件中检索事件ID,存储在属性(变量oldEventIDs)中。
  • 使用getEvents(变量allEvents)检索日历中的所有事件。
  • 过滤日历中的事件,删除属性(变量newEvents)中已经存在的事件。
  • 处理每个新事件后,将事件ID附加到oldEventIDs
  • oldEventIDs存储在属性中。

代码示例:

var sp = PropertiesService.getScriptProperties();
var oldEventIDs = sp.getProperty("events").split(",");
var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var allEvents = cal.getEvents(startTime, endTime);
var newEvents = allEvents.filter(event => !oldEventIDs.includes(event.getId()));
newEvents.forEach(event => {
  // Event processing
  oldEventIDs.push(event.getId());
});
sp.setProperty("events", oldEventIDs.toString());

注意:

  • 无论如何,您每次执行都必须调用getEvents。我看不到如何将事件存储在Properties中可以避免这种情况。这就是从日历中获取事件的方法。无论如何,我认为花费更多时间的是“处理中”事件,有关该事件没有任何信息。
  • 您必须编辑此示例,以便在达到时间限制之前停止执行。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.