Google Apps Script中Calendar.Events.import导入重复事件报Bad Request错误
解决Google Apps Script中Calendar.Events.import导入重复事件的Bad Request错误
问题原因
当你设置singleEvents: true调用Calendar.Events.list时,返回的重复事件实例会携带原重复系列的元数据(比如recurrence、originalEventId、seriesId等字段),这些字段在使用Events.import导入时会和目标日历的规则冲突,触发Bad Request错误。此外,保留showDeleted: true可能尝试导入已删除的事件,也会引发异常。
解决方案
1. 移除重复事件相关的冲突字段
在导入前,删除事件对象中属于重复系列的特殊字段,避免API验证失败。
2. 移除不必要的参数
去掉showDeleted: true,除非你明确需要导入已删除的事件。
3. 优化Organizer设置(可选)
确保目标日历允许设置指定的organizer,若不需要强制修改,可考虑移除该设置,让API自动处理。
修改后的代码
function import_events() { const start = new Date(); const end = new Date(start.getTime() + (365 * 24 * 60 * 60 * 1000)); // 一年范围 const source_calID = "c_1234@group.calendar.google.com" const target_calID = "c_5678@group.calendar.google.com" const events = Calendar.Events.list(source_calID, { timeMin: start.toISOString(), timeMax: end.toISOString(), singleEvents: true, // 移除showDeleted,避免导入已删除事件 orderBy: 'startTime', }); for (var event of events.items) { // 删除重复事件相关的冲突字段 delete event.recurrence; delete event.originalEventId; delete event.seriesId; delete event.recurringEventId; // 若需要修改organizer,确保目标日历有权限 event.organizer = { id: "abc.def@ghi.com", }; try { Calendar.Events.import(event, target_calID); console.log('导入成功: %s', event.summary); } catch (e) { console.error('导入事件 "%s" 失败: %s', event.summary, e.toString()); } } }
额外提示
- 如果导入仍失败,可尝试打印出错事件的完整对象(
console.log(JSON.stringify(event))),查看是否还有其他可能引发冲突的字段(比如id、etag等),必要时也删除这些字段。 - 确保你的脚本拥有目标日历的编辑权限,且指定的organizer账号有权限在目标日历创建事件。
内容的提问来源于stack exchange,提问作者luisa
相关产品推荐
相关产品推荐

