将个人日历添加至Service Account遇CalendarList插入错误求助
问题排查与解决步骤
1. 确认共享权限配置是否到位
- 打开你的个人Google日历,进入「设置和共享」→「与特定人员共享」
- 找到添加的服务账号邮箱,确保权限至少是「查看所有事件」(若需要修改日历内容则选「更改和管理事件」)
- 保存设置后等待1-2分钟,Google权限同步可能存在延迟
2. 修正代码中的日历ID
服务账号本身没有自己的primary日历,你之前用primary访问的是服务账号自身的空日历,自然查不到内容。把代码里的primary替换成你的个人邮箱地址:
Dim Request As EventsResource.ListRequest = service2.Events.List("你的个人邮箱@xxx.com")
3. 检查服务账号的API权限范围
- 打开Google Cloud控制台,找到创建服务账号的对应项目
- 进入「API和服务」,确认已启用Google Calendar API
- 检查服务账号密钥文件对应的权限范围,必须包含
https://www.googleapis.com/auth/calendar(读写权限)或https://www.googleapis.com/auth/calendar.readonly(只读权限),若未添加则补上后重新生成密钥文件
4. 错误原因说明
- 「Not found」:大概率是日历ID填写错误,或是共享权限未同步完成,核对个人邮箱是否正确后,多等待几分钟再尝试
- 「Cannot change your own access level」:这是因为你用服务账号操作它自身的日历(
primary对应服务账号自己的日历),服务账号本身就是自身日历的所有者,无法修改自己的权限。你需要操作的是你的个人日历,因此必须使用个人邮箱作为日历ID
5. 验证服务账号可访问的日历列表
可以先调用CalendarList.List接口,查看服务账号能访问的所有日历,确认你的个人日历是否在列表中:
Dim calendarListRequest As CalendarListResource.ListRequest = service2.CalendarList.List() Dim calendarList As CalendarList = calendarListRequest.Execute() For Each calendar In calendarList.Items MsgBox($"日历ID: {calendar.Id}, 名称: {calendar.Summary}") Next
如果列表中没有你的个人日历,说明共享配置存在问题,回去重新检查共享步骤。
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

