You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:55:55