如何通过Google Apps Script读取其他谷歌账号的共享Calendar内容
Google Apps Script读取共享日历返回null的解决方法
你遇到的TypeError: Cannot read property 'getName' of null报错,根源是CalendarApp.getCalendarById()没有获取到目标日历实例,可按以下步骤逐一排查:
- 核对日历ID是否正确
不要默认使用a2的邮箱作为日历ID,请登录a2账号打开对应日历的设置页面,找到「集成」分类下的「日历ID」字段,复制完整的ID值填入脚本,次级日历的ID通常不是账号邮箱,拼写错误也会导致返回null。 - 核对共享权限配置
登录a2账号的日历共享设置,确认a1账号的权限级别至少为「查看所有活动详情」,如果仅设置为「查看空闲/忙碌(隐藏详情)」,API将无法读取日历实体,直接返回null。 - 先验证网页端访问有效性
登录a1账号的Google日历网页端,点击左侧「其他日历」→「添加日历」→「订阅日历」,输入上一步获取的日历ID,确认网页端可以正常加载、查看该日历的活动内容,确保共享权限已实际生效。 - 重置脚本授权
打开脚本编辑器,进入「项目设置」页面,点击「撤销此应用的访问权限」,之后重新运行脚本,重新完成授权流程,避免旧的授权缓存导致权限不足。同时确认运行脚本时登录的账号确实是a1@gmail.com,没有账号串号问题。
排查完成后可使用以下测试代码验证:
// 替换为从a2日历设置中获取的正确日历ID const calendarId = "你的正确日历ID"; const calendar = CalendarApp.getCalendarById(calendarId); if (!calendar) { console.log("未获取到目标日历,请重新检查ID和权限配置"); } else { console.log("成功获取日历:" + calendar.getName()); // 测试读取未来7天的日历活动 const start = new Date(); const end = new Date(start.getTime() + 7 * 24 * 60 * 60 * 1000); const events = calendar.getEvents(start, end); console.log("未来7天共有" + events.length + "条活动"); }
内容的提问来源于stack exchange,提问作者Gaku Akita
相关产品推荐
相关产品推荐

