Google apps script 在应用程序脚本中键入获取日历事件日期时出错:';尝试时出现类型错误";getStartTime()';

Google apps script 在应用程序脚本中键入获取日历事件日期时出错:';尝试时出现类型错误";getStartTime()';,google-apps-script,google-calendar-api,Google Apps Script,Google Calendar Api,我正在编写一个脚本,通过将Google日历事件的开始和结束日期/时间设置为今天来修改SelectGoogle日历事件。但是,每次尝试获取日历事件的日期或时间时,我都会遇到类型错误,例如使用“event.getTime()”,这会导致“类型错误:无法在对象中找到函数getStartTime”(请参阅示例代码的第19行) 我已启用日历API和Google Apps API,并已授权脚本修改我的日历 我选择和检索相关日历事件的代码运行良好。然而,基于错误文本,我显然没有将事件作为对象来获取,并且我无法

我正在编写一个脚本,通过将Google日历事件的开始和结束日期/时间设置为今天来修改SelectGoogle日历事件。但是,每次尝试获取日历事件的日期或时间时,我都会遇到类型错误,例如使用“event.getTime()”,这会导致“类型错误:无法在对象中找到函数getStartTime”(请参阅示例代码的第19行)

我已启用日历API和Google Apps API,并已授权脚本修改我的日历

我选择和检索相关日历事件的代码运行良好。然而,基于错误文本,我显然没有将事件作为对象来获取,并且我无法确定需要更正的内容。我花了2-3天的大部分时间搜索堆栈溢出(如和post)、应用程序脚本文档、API引用和许多其他相关资源,寻找解决方案或示例,并尝试了我能找到的所有“get”变体,但都无济于事

我完全不熟悉应用程序脚本,因此非常感谢您的帮助

function FloatEvents() {
    var calName = "AAAAAAA"; //The name of the calendar to modify
    var calID = CalendarApp.getCalendarsByName(calName)[0].getId();
    var fromDate = new Date(Date.now() - 7*1000*3600*24);   //Start of the time range with events to be handled
    var untilDate = new Date(Date.now() + 1*1000*3600*24);    //End of the time range with events to be handled
    var optionalArgs = {
        timeMin: fromDate.toISOString(),
        timeMax: untilDate.toISOString(),
        showDeleted: false,
        singleEvents: true,
        orderBy: 'startTime'
    };
    var service = Calendar.Events;
    var response = Calendar.Events.list(calID, optionalArgs);
    var events = response.items;

    // ----- Loop thru period's events -----
    for (i = 0; i < events.length; i++) {
        Logger.log(events[i].getStartTime());  // <=== THIS RESULTS IN A "TypeError: Cannot find function getStartTime in object" ERROR
        // ----- Process event -----
        // Event update code goes here 
        // Will work on this once I solve the dates problem
    }
}
函数(){
var calName=“aaaaaaaaa”;//要修改的日历的名称
var calID=CalendarApp.getCalendarsByName(calName)[0].getId();
var fromDate=new Date(Date.now()-7*1000*3600*24);//时间范围的开始以及要处理的事件
var untilDate=new Date(Date.now()+1*1000*3600*24);//时间范围的结束以及要处理的事件
变量optionalArgs={
timeMin:fromDate.toISOString(),
timeMax:untilDate.toISOString(),
showDeleted:false,
单身事件:对,
订购人:“startTime”
};
var service=Calendar.Events;
var response=Calendar.Events.list(calID,optionalArgs);
var事件=响应项目;
//----循环周期的事件-----
对于(i=0;iLogger.log(events[i].getStartTime());//虽然您是通过CalendarApp获取日历ID,但您使用的是calendar API来检索日历事件,它返回一个事件数组(每个事件都是JSON对象)。要获取每个事件的开始和结束时间,您必须访问循环中的
start
end
属性:

for (i = 0; i < events.length; i++) {
    var startTime = events[i].start.dateTime;
    var endTime = events[i].end.dateTime;
    console.log(startTime);
    console.log(endTime);
}
for(i=0;i
您可以尝试在开始编码之前检查它将要检索的内容,以便了解要处理的数据的结构


但是,如果您想使用CalendarApp服务而不是CalendarAPI,则必须调用函数,该函数返回CalendarEvent数组。这些对象确实具有该函数。

感谢您的指导-它帮助我克服了错误,并在代码方面取得了进展。我对访问vi提供的不同可能性感到困惑a通过API和日历应用程序-你能推荐任何资源来帮助我理解差异吗?这是我在他们的文档中找到的唯一“比较”。高级Google服务(如用于检索事件的日历服务)使用Google API,因此它们比G套件服务(如CalendarApp)更强大@42 REST API(高级服务)总是返回数据,这些数据可能是“类型化”的使用点/句点运算符支持属性自动完成。数据几乎总是JavaScript本机对象,例如数字、字符串、布尔值、数组或通用对象。要使用它们,必须为方法调用提供输入数据和标识符。本机应用程序脚本服务返回类,这些类具有类和实例特定的方法例如
Event#getStartTime()
,偶尔还有数据(例如电子表格
Range#getValues()
)。@tehhowch感谢您的澄清。我发现我需要更好地理解JavaScript的概念和功能。