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

如何将Amion订阅日历的班次事件导入Google Sheets构建住院医师班次数据库?

解决Google Apps Script读取订阅日历(Amion)事件并导入Google Sheets的问题

我之前也碰到过类似的需求——原生脚本默认只处理用户创建的Google日历,确实没法直接访问订阅的外部日历。下面是一步步帮你解决的方案:

1. 先获取订阅日历的ID

你需要先拿到每位住院医师Amion订阅日历的唯一ID,操作步骤很简单:

  • 打开Google Calendar,在左侧侧边栏找到对应的Amion订阅日历
  • 点击日历名称旁的三个点 → 设置和共享
  • 滚动到「集成日历」区域,复制「日历ID」(一般是一串类似邮箱格式的字符串)

把所有需要处理的订阅日历ID收集起来,存在一个数组里备用。

2. 修改脚本以访问订阅日历

原来的脚本应该只针对默认日历或单个原生日历,现在我们要调整它来遍历所有目标订阅日历,读取事件并导入Sheets。

这里是修改后的核心代码示例:

function importAmionShiftsToSheets() {
  // 替换成你收集到的Amion订阅日历ID数组
  const calendarIds = [
    "resident1@example.com",
    "resident2@example.com",
    // ... 更多住院医师的日历ID
  ];
  
  // 设置你需要导入的日期范围(按需调整)
  const startDate = new Date("2024-01-01");
  const endDate = new Date("2024-12-31");
  
  // 目标Google Sheets表格(替换成你的表格ID和工作表名称)
  const sheet = SpreadsheetApp.openById("YOUR_SPREADSHEET_ID").getSheetByName("Shifts");
  
  // 清空现有数据(可选,根据你的需求决定是否保留历史数据)
  sheet.clearContents();
  // 写入表头
  sheet.appendRow(["住院医师", "班次标题", "开始时间", "结束时间", "备注"]);
  
  // 遍历每个订阅日历
  calendarIds.forEach(calendarId => {
    try {
      // 获取订阅日历对象
      const calendar = CalendarApp.getCalendarById(calendarId);
      if (!calendar) {
        console.log(`无法访问日历ID: ${calendarId},请检查权限或ID是否正确`);
        return;
      }
      
      // 获取日期范围内的事件,包含重复班次的所有实例
      const events = calendar.getEvents(startDate, endDate, {includeRecurrences: true});
      
      // 遍历事件并写入表格
      events.forEach(event => {
        // 提取Amion日历里的关键信息(根据实际事件字段调整)
        const residentName = calendar.getName(); // 日历名称通常就是住院医师姓名
        const title = event.getTitle();
        const startTime = event.getStartTime();
        const endTime = event.getEndTime();
        const description = event.getDescription();
        
        // 写入一行数据
        sheet.appendRow([residentName, title, startTime, endTime, description]);
      });
      
      console.log(`成功导入日历 ${calendar.getName()} 的 ${events.length} 个班次`);
    } catch (e) {
      console.log(`处理日历 ${calendarId} 时出错: ${e.message}`);
    }
  });
  
  SpreadsheetApp.getUi().alert("班次数据导入完成!");
}

3. 关键注意事项

  • 权限授权:第一次运行脚本时,会提示你授权,需要允许脚本访问你的Google Calendar和Google Sheets。要确保你的Google账号有权限查看这些Amion订阅日历(如果是共享过来的,要确认已订阅并能在Calendar里正常查看)。
  • Amion事件格式适配:Amion的日历事件可能有特定的标题或描述格式,比如包含班次类型、换班备注等,你可以根据实际需求修改appendRow里的字段,比如拆分标题里的信息,或者提取描述中的关键内容。
  • 重复事件处理:代码里用了{includeRecurrences: true}参数,会把重复班次的每个实例都导入;如果你只需要重复班次的模板,可以去掉这个参数。
  • 性能优化:如果班次数量很多(比如上千条),建议用setValues()代替多次appendRow(),减少API调用次数,提升速度。比如先把所有数据存在一个二维数组里,最后一次性写入表格。

4. 测试与调试

先选一个小的日期范围(比如一周)运行脚本,检查导入的数据是否正确,确认住院医师姓名、班次时间、标题等信息无误后,再扩大日期范围。如果遇到错误,可以查看脚本编辑器的「日志」(视图 → 日志),里面会显示具体的错误信息,比如日历ID错误、权限不足等。

内容的提问来源于stack exchange,提问作者PirateBill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:09:48