Google Apps Script中Calendar事件对象缺失预期方法问题
问题原因与解决方法
核心问题:混淆了两种Google Calendar服务
你遇到的错误源于混用了Google Apps Script中两种不同的Calendar服务:
Calendar.Events.list属于Google Calendar Advanced Service,它直接调用Calendar REST API,返回的是普通JavaScript对象(JSON结构),并非Google Apps Script封装的CalendarEvent类实例,因此没有getTag()这类方法。Calendar.getEventById是错误的调用方式——这个方法属于CalendarApp服务,正确写法是CalendarApp.getEventById(),而非Calendar.getEventById()。
两种解决思路
思路1:改用CalendarApp服务获取事件
CalendarApp返回的是封装好的CalendarEvent实例,支持getTag()等方法:
// 获取目标日历 const targetCalendar = CalendarApp.getCalendarById(myCalendar); // 获取24小时内的事件 const events = targetCalendar.getEvents(new Date(), new Date(Date.now() + 24 * 60 * 60 * 1000)); for (const event of events) { Logger.log(`${event.getTitle()} / ${event.getTag("PRInv")}`); }
思路2:继续使用Advanced Service,手动读取自定义属性
如果需要保留Advanced Service的灵活性,自定义标签(Tag)实际存储在事件对象的extendedProperties字段中,可直接访问:
const response = Calendar.Events.list(myCalendar, { timeMin: (new Date()).toISOString(), timeMax: (new Date(Date.now() + 24 * 60 * 60 * 1000)).toISOString(), showDeleted: false, singleEvents: true, maxResults: 100, orderBy: 'startTime', timeZone: 'UTC' } ); for (const event of response.items) { // 自定义标签分为private和shared两类,根据实际情况选择 const prInvTag = event.extendedProperties?.private?.PRInv || '未设置标签'; Logger.log(`${event.summary} / ${prInvTag}`); }
关键区别总结
| 服务类型 | 返回类型 | 特点 |
|---|---|---|
| CalendarApp | 封装类实例(如CalendarEvent) | 方法丰富,开发效率高 |
| Calendar Advanced Service | 原始JSON对象 | 灵活度高,需手动处理字段 |
内容的提问来源于stack exchange,提问作者symcbean
相关产品推荐
相关产品推荐

