Google apps script 脚本导出到工作表时出错
我一直在寻找我的错误的答案,但运气不好。我发现这个谷歌应用程序脚本能够在谷歌私人日历的日期范围内进行搜索。 我尝试更改出现错误的代码行上的日期。 它会引发以下错误: TypeError:无法调用null的方法getEvents。第39行,文件 代码解散 引发错误的代码行是:Google apps script 脚本导出到工作表时出错,google-apps-script,google-calendar-api,Google Apps Script,Google Calendar Api,我一直在寻找我的错误的答案,但运气不好。我发现这个谷歌应用程序脚本能够在谷歌私人日历的日期范围内进行搜索。 我尝试更改出现错误的代码行上的日期。 它会引发以下错误: TypeError:无法调用null的方法getEvents。第39行,文件 代码解散 引发错误的代码行是: var events = cal.getEvents(new Date("Feburary 5, 2018 00:00:00 CST"), new Date("March 2, 2018 23:59:59 CST"));
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);
}
如果收到该错误,则无法调用null的getEvents方法,因为cal变量为null
根据谷歌日历的文档参考,如果日历不存在,或者您没有访问它的权限,则返回null
您的日历id不正确,或者您没有访问该日历的权限,即该日历既不与您共享,也不公开。解决该问题后,脚本将能够检查其事件
我建议将脚本的这一部分修改为:
var cal = CalendarApp.getCalendarById(mycal);
if(!cal) {
Browser.msgBox("Unable to access calendar with id=" + mycal);
return;
}
var events = cal.getEvents(....
这将避免空引用,并提醒您日历隐私问题或其id问题。getCalendarById方法需要日历id而不是日历地址。尝试用id替换mycal变量的地址。
谷歌日历的日历id可以在“我的日历设置”下拉列表中的“集成日历”选项中找到。应该是这样的blah@blah.xxx或blah@group.calendar.google.com我尝试将mycal=calendar电子邮件更改为calendar id,效果很好其他代码行,特别是创建cal的代码行呢?这些也很重要。您尝试了什么方法来修复此错误,您对此错误消息的研究告诉了您什么?对不起,我对Google应用程序脚本是全新的。函数导出\u gcal\u到\u gsheet{编辑您的问题以包含代码-不要将代码块放入“评论”部分。我已提升了对此专用共享日历的权限。我也尝试了此ID,但它不起作用。相同错误。集成日历日历ID compucom.com_3hd44kal0eabhffqoqgijs6it8@group.calendar.google.comI我现在尝试按日历名称而不是日历ID。但是我得到一个错误。ReferenceError:cal未定义。第41行,文件代码。它指向具有日期范围的代码行。这就是我现在尝试的内容//获取名为calendar Name的公共日历。var calendars=CalendarApp.getCalendarsByName'Calendar Name';Logger.log'Find%s matching calendars';calendars.length;@PatBruno您当然会遇到这个错误-您的新代码将变量与日历设置为calendars而不是cal。因此您必须更新您的变量名。我已经尝试了所有我读到的内容以使其工作。当我将其设置为按ID搜索时,它应该会重新启动rn this….Calendar-具有给定ID的日历,如果日历不存在或用户无法访问它,则为null。我确实有权访问它。它可能被我的公司阻止。我也从我的家庭网络尝试了此操作,结果相同。我无法调用方法get Events of null。第39行