调用Google资源日历getEvents方法报错:is not a function
Google Apps Script 资源日历调用
getEvents()报错问题 问题描述
我尝试使用Google Apps Script查询资源日历,通过getEvents(start,end)方法获取日历中的事件数组。该方法在默认个人日历中可正常运行,但在资源日历中,虽被识别为Calendar对象,却出现错误:
TypeError: xxxx.getEvents is not a function
我怀疑getEvents()方法因某些原因无法用于资源日历?
相关代码
Logger.log(calendarName); // 加载故障设备对应的日历 var kitCalendar = CalendarApp.getCalendarsByName(calendarName); // 设置开始日期为今天,结束日期为一年后 var startDate = new Date(); var endDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1)); Logger.log(startDate); Logger.log(endDate); Logger.log(kitCalendar); events = kitCalendar.getEvents(startDate,endDate);
执行日志
Execution log 9:07:21 PM Notice Execution started 9:07:22 PM Info (Test kit item)-Dummy resource calendar 1 for testing 9:07:23 PM Info Tue Nov 08 21:07:23 GMT+00:00 2022 9:07:23 PM Info Wed Nov 08 21:07:23 GMT+00:00 2023 9:07:23 PM Info [Calendar] 9:07:23 PM Error TypeError: kitCalendar.getEvents is not a function addFault @ Code.gs:28
问题原因与解决办法
问题和资源日历无关,是你误用了API方法:CalendarApp.getCalendarsByName()返回的是Calendar对象数组(哪怕只有一个匹配结果),日志里的[Calendar]也明确显示这是数组类型。你直接对数组调用了单个Calendar对象才有的getEvents()方法,所以报错。
资源日历和个人日历的getEvents()方法用法完全一致,修正代码即可:
- 若确定只有一个匹配日历,直接取数组第一个元素:
var kitCalendar = CalendarApp.getCalendarsByName(calendarName)[0]; - 更严谨的写法是先判断数组长度,避免找不到日历的情况:
var kitCalendars = CalendarApp.getCalendarsByName(calendarName); if (kitCalendars.length > 0) { var kitCalendar = kitCalendars[0]; events = kitCalendar.getEvents(startDate, endDate); } else { Logger.log("未找到指定名称的日历"); }
内容的提问来源于stack exchange,提问作者Richard Cookson
相关产品推荐
相关产品推荐

