我已经搜索了我的错误的答案,但没有运气。我发现此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);
}
答案 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
并且效果很好