影刀RPA 医疗HIS系统自动化诊疗数据提取与报表生成什么情况用什么 → 怎么做 → 有什么坑作者林焱 | 飞行社出品什么情况用什么医院的信息系统HIS大多是很老的软件没有API数据导出全靠手动点按钮。每天要从HIS里导出诊疗数据、药品消耗、医保结算报表手动操作耗时且容易出错。这套方案适合医院信息科/医务科定期数据上报药店从HIS导出进销存数据医保结算数据自动核对核心工具影刀RPA HIS系统桌面客户端或Web版 Excel/数据库怎么做第一步分析HIS系统的操作路径HIS系统通常是Windows桌面程序如东软、卫宁、创业慧康等用影刀的捕获元素功能记录以下操作路径登录HIS → 进入【报表中心】→ 选择报表类型 → 设置日期范围 → 点击【查询】→ 点击【导出Excel】关键HIS系统的表格通常是第三方控件如DevExpress、Infragistics影刀有时无法直接读取单元格内容需要用图像识别或快捷键CtrlC复制来提取数据。第二步用影刀自动化HIS数据导出# 在影刀的Python节点中可以用pyautogui辅助操作难以捕获的HIS界面importpyautoguiimporttimeimportsubprocessimportpandasaspddefexport_his_report(report_type,start_date,end_date,output_path): 自动导出HIS报表 report_type: 门诊诊疗, 住院结算, 药品消耗 等 # 1. 启动HIS客户端如果还没打开his_pathrC:\Program Files\HIS\HISClient.exesubprocess.Popen(his_path)time.sleep(10)# 等待HIS启动# 2. 用影刀的【模拟操作】指令登录假设已经记录了登录流程# 这部分在影刀可视化流程里完成这里只做Python扩展# 3. 导航到报表页面用快捷键或图像识别点击菜单pyautogui.hotkey(alt,r)# 假设AltR打开报表菜单time.sleep(2)# 4. 设置报表参数# 用影刀的【填写】指令操作日期选择器和下拉框# 这里演示用Python设置系统剪贴板然后粘贴importpyperclip pyperclip.copy(start_date)pyautogui.hotkey(ctrl,v)# 粘贴开始日期time.sleep(0.5)pyperclip.copy(end_date)# Tab键跳到结束日期然后粘贴pyautogui.press(tab)pyautogui.hotkey(ctrl,v)time.sleep(0.5)# 5. 点击【查询】按钮用图像识别定位query_btn_pospyautogui.locateCenterOnScreen(query_button.png,confidence0.8)ifquery_btn_pos:pyautogui.click(query_btn_pos)time.sleep(5)# 等待查询结果加载# 6. 导出Excelexport_btn_pospyautogui.locateCenterOnScreen(export_excel_btn.png,confidence0.8)ifexport_btn_pos:pyautogui.click(export_btn_pos)time.sleep(2)# 处理另存为对话框pyperclip.copy(output_path)pyautogui.hotkey(ctrl,v)pyautogui.press(enter)time.sleep(5)# 等待导出完成print(f报表已导出到:{output_path})第三步数据清洗与汇总HIS导出的Excel通常格式不规范合并单元格、多余的表头、空行等需要清洗defclean_his_excel(raw_file,cleaned_file):清洗HIS导出的Exceldfpd.read_excel(raw_file,skiprows3)# 跳过前3行垃圾表头# 删除全空的行dfdf.dropna(howall)# 标准化列名HIS导出的列名经常有空格或特殊字符df.columns[col.strip().replace( ,).replace(,().replace(,))forcolindf.columns]# 处理日期列date_columns[colforcolindf.columnsif日期incolor时间incol]forcolindate_columns:df[col]pd.to_datetime(df[col],errorscoerce)# 处理金额列HIS导出金额经常带¥符号amount_columns[colforcolindf.columnsif金额incolor费用incol]forcolinamount_columns:df[col]df[col].astype(str).str.replace(¥,).str.replace(,,).astype(float)df.to_excel(cleaned_file,indexFalse)print(f清洗完成有效数据{len(df)}条)returndf第四步自动生成上报报表defgenerate_medical_report(cleaned_df,report_type,output_path):生成符合卫健委/医保局要求的上报报表ifreport_type门诊诊疗统计:# 按科室汇总dept_summarydf.groupby(科室).agg({就诊人数:sum,诊疗费用:sum,药品费用:sum}).reset_index()# 计算占比dept_summary[药品占比]dept_summary[药品费用]/dept_summary[诊疗费用]# 添加报告头fromopenpyxlimportload_workbookwithpd.ExcelWriter(output_path,engineopenpyxl)aswriter:dept_summary.to_excel(writer,sheet_name科室汇总,indexFalse)# 在Excel里添加图表用openpyxlworkbookwriter.book worksheetwriter.sheets[科室汇总]# ... 添加柱状图 ...elifreport_type医保结算对账:# 对账逻辑HIS数据 vs 医保回款数据df[结算状态]df.apply(lambdarow:已结算ifrow[医保结算金额]0else未结算,axis1)unsettleddf[df[结算状态]未结算]print(f警告有{len(unsettled)}条记录未结算涉及金额{unsettled[总费用].sum():.2f}元)returnoutput_path第五步影刀RPA完整流程编排【定时触发】每月1日凌晨2点自动运行 ↓ 【启动HIS客户端】检查是否已在运行否则启动 ↓ 【登录HIS】用凭据自动登录用凭据管理器安全存储密码 ↓ 【循环】遍历需要导出的报表类型 ├─ 门诊诊疗报表 ├─ 住院结算报表 ├─ 药品消耗报表 └─ 医保对账报表 ↓ 【对每个报表】 → 设置日期范围上月1日~上月最后一天 → 点击查询 → 导出Excel到本地临时目录 → Python节点clean_his_excel() 清洗数据 → Python节点generate_medical_report() 生成上报报表 ↓ 【合并报表】将多个报表合并到一个Excel文件不同Sheet ↓ 【发送邮件】将最终报表发送给医务科主任/医保办 ↓ 【归档】将原始数据和清洗后数据存档到服务器有什么坑坑1HIS系统表格无法直接读取很多HIS系统用的是复杂的第三方表格控件影刀的【读取表格】指令失灵。解决方案有三个用快捷键复制粘贴在HIS表格里CtrlA全选→CtrlC复制→ 粘贴到Excel图像识别OCR对表格区域截图用OCR提取文字适合列数固定的表格数据库直连如果HIS用的是SQL Server/Oracle直接连数据库查表需要DBA授权# 方案3直接查HIS数据库最有效importpyodbcdefquery_his_database(sql_query):直接查询HIS数据库connpyodbc.connect(DRIVER{SQL Server};SERVERhis-db-server;DATABASEHISDB;Trusted_Connectionyes;# Windows身份验证)dfpd.read_sql(sql_query,conn)conn.close()returndf# 示例查询某天的门诊记录dfquery_his_database( SELECT dept_name, COUNT(*) as visit_count, SUM(fee) as total_fee FROM outpatient_record WHERE visit_date 2026-06-01 GROUP BY dept_name )坑2HIS系统反应慢等待时间不好控制老的HIS系统在点击查询后可能要等10-30秒才出结果。用固定等待时间不靠谱有时快有时慢。正确做法用影刀的【等待元素出现】指令等待导出按钮变为可点击状态或者等待表格行数 0。坑3医院内网隔离无法直接访问外部API医院的内网通常和互联网物理隔离影刀流程如果运行在内网电脑上无法调用外网的API比如发邮件、发企微通知。解决方案用中转服务器HIS数据导出后先存到内网共享文件夹再由一台能访问外网的电脑读取并发送通知或者用邮件医院内网通常能发邮件SMTP走内网邮件服务器用邮件作为通知渠道坑4合规问题非常重要医疗数据属于敏感个人信息自动化脚本处理此类数据时需注意不在日志里记录患者姓名、身份证号等敏感信息导出的Excel文件加密存储用openpyxl加密或Windows EFS流程操作日志保留审计轨迹# 数据脱敏处理defmask_patient_info(df):对患者敏感信息脱敏df[患者姓名]df[患者姓名].apply(lambdax:x[0]**(len(x)-1))df[身份证号]df[身份证号].apply(lambdax:x[:6]**8x[-4:])df[手机号]df[手机号].apply(lambdax:x[:3]**4x[-4:])returndf总结场景技术方案难度HIS有API直接调用API最简单⭐HIS是Web版影刀网页自动化⭐⭐HIS是桌面版可读取表格影刀桌面自动化⭐⭐⭐HIS是桌面版无法读取数据库直连需授权⭐⭐⭐⭐无任何接口图像识别复制粘贴⭐⭐⭐⭐⭐优先争取数据库直连权限这是最稳定、最高效的方案。如果只能做桌面自动化记得加足够的等待时间和异常处理。
影刀RPA 医疗HIS系统自动化:诊疗数据提取与报表生成
影刀RPA 医疗HIS系统自动化诊疗数据提取与报表生成什么情况用什么 → 怎么做 → 有什么坑作者林焱 | 飞行社出品什么情况用什么医院的信息系统HIS大多是很老的软件没有API数据导出全靠手动点按钮。每天要从HIS里导出诊疗数据、药品消耗、医保结算报表手动操作耗时且容易出错。这套方案适合医院信息科/医务科定期数据上报药店从HIS导出进销存数据医保结算数据自动核对核心工具影刀RPA HIS系统桌面客户端或Web版 Excel/数据库怎么做第一步分析HIS系统的操作路径HIS系统通常是Windows桌面程序如东软、卫宁、创业慧康等用影刀的捕获元素功能记录以下操作路径登录HIS → 进入【报表中心】→ 选择报表类型 → 设置日期范围 → 点击【查询】→ 点击【导出Excel】关键HIS系统的表格通常是第三方控件如DevExpress、Infragistics影刀有时无法直接读取单元格内容需要用图像识别或快捷键CtrlC复制来提取数据。第二步用影刀自动化HIS数据导出# 在影刀的Python节点中可以用pyautogui辅助操作难以捕获的HIS界面importpyautoguiimporttimeimportsubprocessimportpandasaspddefexport_his_report(report_type,start_date,end_date,output_path): 自动导出HIS报表 report_type: 门诊诊疗, 住院结算, 药品消耗 等 # 1. 启动HIS客户端如果还没打开his_pathrC:\Program Files\HIS\HISClient.exesubprocess.Popen(his_path)time.sleep(10)# 等待HIS启动# 2. 用影刀的【模拟操作】指令登录假设已经记录了登录流程# 这部分在影刀可视化流程里完成这里只做Python扩展# 3. 导航到报表页面用快捷键或图像识别点击菜单pyautogui.hotkey(alt,r)# 假设AltR打开报表菜单time.sleep(2)# 4. 设置报表参数# 用影刀的【填写】指令操作日期选择器和下拉框# 这里演示用Python设置系统剪贴板然后粘贴importpyperclip pyperclip.copy(start_date)pyautogui.hotkey(ctrl,v)# 粘贴开始日期time.sleep(0.5)pyperclip.copy(end_date)# Tab键跳到结束日期然后粘贴pyautogui.press(tab)pyautogui.hotkey(ctrl,v)time.sleep(0.5)# 5. 点击【查询】按钮用图像识别定位query_btn_pospyautogui.locateCenterOnScreen(query_button.png,confidence0.8)ifquery_btn_pos:pyautogui.click(query_btn_pos)time.sleep(5)# 等待查询结果加载# 6. 导出Excelexport_btn_pospyautogui.locateCenterOnScreen(export_excel_btn.png,confidence0.8)ifexport_btn_pos:pyautogui.click(export_btn_pos)time.sleep(2)# 处理另存为对话框pyperclip.copy(output_path)pyautogui.hotkey(ctrl,v)pyautogui.press(enter)time.sleep(5)# 等待导出完成print(f报表已导出到:{output_path})第三步数据清洗与汇总HIS导出的Excel通常格式不规范合并单元格、多余的表头、空行等需要清洗defclean_his_excel(raw_file,cleaned_file):清洗HIS导出的Exceldfpd.read_excel(raw_file,skiprows3)# 跳过前3行垃圾表头# 删除全空的行dfdf.dropna(howall)# 标准化列名HIS导出的列名经常有空格或特殊字符df.columns[col.strip().replace( ,).replace(,().replace(,))forcolindf.columns]# 处理日期列date_columns[colforcolindf.columnsif日期incolor时间incol]forcolindate_columns:df[col]pd.to_datetime(df[col],errorscoerce)# 处理金额列HIS导出金额经常带¥符号amount_columns[colforcolindf.columnsif金额incolor费用incol]forcolinamount_columns:df[col]df[col].astype(str).str.replace(¥,).str.replace(,,).astype(float)df.to_excel(cleaned_file,indexFalse)print(f清洗完成有效数据{len(df)}条)returndf第四步自动生成上报报表defgenerate_medical_report(cleaned_df,report_type,output_path):生成符合卫健委/医保局要求的上报报表ifreport_type门诊诊疗统计:# 按科室汇总dept_summarydf.groupby(科室).agg({就诊人数:sum,诊疗费用:sum,药品费用:sum}).reset_index()# 计算占比dept_summary[药品占比]dept_summary[药品费用]/dept_summary[诊疗费用]# 添加报告头fromopenpyxlimportload_workbookwithpd.ExcelWriter(output_path,engineopenpyxl)aswriter:dept_summary.to_excel(writer,sheet_name科室汇总,indexFalse)# 在Excel里添加图表用openpyxlworkbookwriter.book worksheetwriter.sheets[科室汇总]# ... 添加柱状图 ...elifreport_type医保结算对账:# 对账逻辑HIS数据 vs 医保回款数据df[结算状态]df.apply(lambdarow:已结算ifrow[医保结算金额]0else未结算,axis1)unsettleddf[df[结算状态]未结算]print(f警告有{len(unsettled)}条记录未结算涉及金额{unsettled[总费用].sum():.2f}元)returnoutput_path第五步影刀RPA完整流程编排【定时触发】每月1日凌晨2点自动运行 ↓ 【启动HIS客户端】检查是否已在运行否则启动 ↓ 【登录HIS】用凭据自动登录用凭据管理器安全存储密码 ↓ 【循环】遍历需要导出的报表类型 ├─ 门诊诊疗报表 ├─ 住院结算报表 ├─ 药品消耗报表 └─ 医保对账报表 ↓ 【对每个报表】 → 设置日期范围上月1日~上月最后一天 → 点击查询 → 导出Excel到本地临时目录 → Python节点clean_his_excel() 清洗数据 → Python节点generate_medical_report() 生成上报报表 ↓ 【合并报表】将多个报表合并到一个Excel文件不同Sheet ↓ 【发送邮件】将最终报表发送给医务科主任/医保办 ↓ 【归档】将原始数据和清洗后数据存档到服务器有什么坑坑1HIS系统表格无法直接读取很多HIS系统用的是复杂的第三方表格控件影刀的【读取表格】指令失灵。解决方案有三个用快捷键复制粘贴在HIS表格里CtrlA全选→CtrlC复制→ 粘贴到Excel图像识别OCR对表格区域截图用OCR提取文字适合列数固定的表格数据库直连如果HIS用的是SQL Server/Oracle直接连数据库查表需要DBA授权# 方案3直接查HIS数据库最有效importpyodbcdefquery_his_database(sql_query):直接查询HIS数据库connpyodbc.connect(DRIVER{SQL Server};SERVERhis-db-server;DATABASEHISDB;Trusted_Connectionyes;# Windows身份验证)dfpd.read_sql(sql_query,conn)conn.close()returndf# 示例查询某天的门诊记录dfquery_his_database( SELECT dept_name, COUNT(*) as visit_count, SUM(fee) as total_fee FROM outpatient_record WHERE visit_date 2026-06-01 GROUP BY dept_name )坑2HIS系统反应慢等待时间不好控制老的HIS系统在点击查询后可能要等10-30秒才出结果。用固定等待时间不靠谱有时快有时慢。正确做法用影刀的【等待元素出现】指令等待导出按钮变为可点击状态或者等待表格行数 0。坑3医院内网隔离无法直接访问外部API医院的内网通常和互联网物理隔离影刀流程如果运行在内网电脑上无法调用外网的API比如发邮件、发企微通知。解决方案用中转服务器HIS数据导出后先存到内网共享文件夹再由一台能访问外网的电脑读取并发送通知或者用邮件医院内网通常能发邮件SMTP走内网邮件服务器用邮件作为通知渠道坑4合规问题非常重要医疗数据属于敏感个人信息自动化脚本处理此类数据时需注意不在日志里记录患者姓名、身份证号等敏感信息导出的Excel文件加密存储用openpyxl加密或Windows EFS流程操作日志保留审计轨迹# 数据脱敏处理defmask_patient_info(df):对患者敏感信息脱敏df[患者姓名]df[患者姓名].apply(lambdax:x[0]**(len(x)-1))df[身份证号]df[身份证号].apply(lambdax:x[:6]**8x[-4:])df[手机号]df[手机号].apply(lambdax:x[:3]**4x[-4:])returndf总结场景技术方案难度HIS有API直接调用API最简单⭐HIS是Web版影刀网页自动化⭐⭐HIS是桌面版可读取表格影刀桌面自动化⭐⭐⭐HIS是桌面版无法读取数据库直连需授权⭐⭐⭐⭐无任何接口图像识别复制粘贴⭐⭐⭐⭐⭐优先争取数据库直连权限这是最稳定、最高效的方案。如果只能做桌面自动化记得加足够的等待时间和异常处理。