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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:55:20