脚本export_gcal_to_gsheet

时间:2018-03-06 13:11:28

标签: google-apps-script google-calendar-api

我已经搜索了我的错误的答案,但没有运气。我发现此Google App脚本能够在私人Google日历的日期范围内进行搜索。 我尝试更改有错误的代码行上的日期。 它引发了以下错误:

  

TypeError:无法调用方法" getEvents"为null。 (第39行,档案   "代码"。)驳回

引发错误的代码行是:

 var events = cal.getEvents(new Date("Feburary 5, 2018 00:00:00 CST"), new Date("March 2, 2018 23:59:59 CST"));


function export_gcal_to_gsheet(){
    var mycal = "https://calendar.google.com/calendar/ical/compucom.com_3hd44kal0eabhffqoqgijs6it8%40group.calendar.google.com/private-dd5e021b521802f13b6d664dd3d275fa/basic.ics";
    var cal = CalendarApp.getCalendarById(mycal);
    var events = cal.getEvents(new Date("Feburary 5, 2018 00:00:00 CST"), new Date("March 2, 2018 23:59:59 CST"));
    var sheet = SpreadsheetApp.getActiveSheet();
    var header = [["Calendar Address", "Event Title", "Event Description", "Event Location", "Event Start", "Event End", "Calculated Duration", "Visibility", "Date Created", "Last Updated", "MyStatus", "Created By", "All Day Event", "Recurring Event"]]
    var range = sheet.getRange(1,1,1,14);
    range.setValues(header);
    for (var i=0;i<events.length;i++) {
    var row=i+2;
    var myformula_placeholder = '';
    var details=[[mycal,events[i].getTitle(), events[i].getDescription(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), myformula_placeholder, ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent()]];
    var range=sheet.getRange(row,1,1,14);
    range.setValues(details);
    var cell=sheet.getRange(row,7);
    cell.setFormula('=(HOUR(F' +row+ ')+(MINUTE(F' +row+ ')/60))-(HOUR(E' +row+ ')+(MINUTE(E' +row+ ')/60))');
    cell.setNumberFormat('.00');

    }
    }
    function onOpen() {
      Browser.msgBox('App Instructions - Please Read This Message', '1) Click Tools then Script Editor\\n2) Read/update the code with your desired values.\\n3) Then when ready click Run export_gcal_to_gsheet from the script editor.', Browser.Buttons.OK);

    }

3 个答案:

答案 0 :(得分:1)

您收到该错误Cannot call method "getEvents" of null,因为cal变量为空。

根据Google日历getCalendarById method的文档参考,如果日历不存在,或者您无权访问日历,则会返回null

您的日历ID不正确,或者您无权访问该日历(即,它既不与您共享,也不与公众共享)。解决该问题后,您的脚本将能够检查其事件。

我建议修改脚本的这一部分:

var cal = CalendarApp.getCalendarById(mycal);
if(!cal) {
    Browser.msgBox("Unable to access calendar with id=" + mycal);
    return;
}
var events = cal.getEvents(....

这将避免空引用并提醒您日历隐私问题或其ID问题。

答案 1 :(得分:0)

Step20方法需要日历ID而不是日历地址。尝试用ID替换getCalendarById变量的地址。 可以在“我的日历设置”下拉菜单中的“集成日历”选项中找到Google日历的日历ID。它应该看起来像“ blah@blah.xxx”或“ blah@group.calendar.google.com”

答案 2 :(得分:0)

我尝试将 mycal = calendar 电子邮件更改为 calendar id 并且效果很好