You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:12:58