当前位置:首页>Excel>质效精研 P35 | 极客工具:Excel 不只是表格,用函数实现质控自动化

质效精研 P35 | 极客工具:Excel 不只是表格,用函数实现质控自动化

  • 2026-08-07 17:59:32
质效精研 P35 | 极客工具:Excel 不只是表格,用函数实现质控自动化
📄核心摘要

项目编号:质效精研 · P35专业领域:医疗质量安全管理 / 质控工具 / Excel 自动化核心问题:质控员每天 3 小时从 HIS 导出、手工透视表——Excel 明明就在桌面上,为什么我们还在「搬砖」?三条战线:

  • 🟢 基础扫盲:Excel 在中国医院的「基础生产力」地位,以及质控员为什么「数据堆成山,函数用不上」
  • 🟡 实战进阶:10 类必备函数 + 5 个实战模板 + 数据透视表深度用法 + 10 项质控 Checklist
  • 🔴 极客升维:Power Query 自动清洗、Power Pivot 数据建模、VBA 自动化、Excel + Power BI 联动目标篇幅:9,000-11,000 字

前言:每天 3 小时还是 5 分钟,差的是「函数」

周二上午 9 点,某三甲医院质控员小林的桌面:

左屏开着 HIS 系统,正在导出昨天的手术明细;右屏开着 Excel,准备做一张「手术并发症月度统计表」;手边放着计算器、笔、还有一杯凉了的美式。

她的工作流是这样的:

  1. 从 HIS 导出昨天的手术明细 → 1 小时;
  2. 从病案系统导出手术并发症登记表 → 40 分钟;
  3. 手工 VLOOKUP 把两份表按住院号关联 → 50 分钟;
  4. 手工透视表算各科室并发症率 → 30 分钟;
  5. 手动改格式、画图、写分析 → 40 分钟。

3 个小时,一张表,每周二雷打不动。

直到上个月,她在院内培训听了某位「Excel 极客」老师的课,回来花了 2 周改造自己的工作流——结果:同一张表,从 3 小时压到 5 分钟。

变化在哪儿?

她没有换工具,没有上 BI 系统,没有学 Python——她只是把 VLOOKUP 换成 XLOOKUP,把手工透视表换成数据透视表 + 切片器,把每周一次的「重复动作」固化成 VBA 一键执行。

这就是 P35 要讲的事:Excel 不只是表格,是质控员的「第一生产工具」——它能让你从「搬砖」变「极客」,只要你愿意把函数用起来。

这一篇,我们讲清楚四件事:

  1. Excel 在中国医院的「基础生产力」地位,以及质控员的 Excel 现状;
  2. 10 类必备函数 + 5 个实战模板,让「重复劳动」变成「一键输出」;
  3. Power Query + Power Pivot + VBA,极客层面的三层自动化;
  4. 一个真实案例:某三甲医院质控员的「极客养成记」。

不绕弯子,我们开始。

Part 1:基础扫盲层——Excel 在医院,为什么是「基础生产力」?

一、Excel 在中国医院的「基础设施」地位

做一个大胆的判断:中国 90% 以上的医院,Excel 仍然是数据处理的「基础设施」

为什么?三个原因。

第一,人人有、天天用——从院长到质控员,从临床医生到财务,几乎每个医院员工的电脑上都有 Excel。不需要申请权限,不需要走采购流程,「打开就能用」。

第二,HIS / EMR / BI 数据最终都要「落地」——HIS 系统能导出 Excel,病案系统能导出 Excel,BI 大屏能导出 Excel,医保平台能导出 Excel。无论上游系统多先进,Excel 都是数据落到「人」手里的最后一公里。

第三,Excel 的能力边界,90% 的医院只用到了 10%——大部分医院的 Excel 使用停留在「录入 + 求和 + 画图」,而真正让 Excel 变成「自动化工具」的功能(函数、数据透视表、Power Query、VBA),绝大部分质控员都没用过。

这就是我们写 P35 的核心动机:不是教你用 Excel,是教你怎么「榨干 Excel」,把它从「表格软件」升级为「质控自动化工具」。

我们的医数智联系列写了那么多数据库、python、AI, 其实现状是 Excel才是真正的主力

二、质控员的 Excel 现状:数据堆成山,函数用不上

我在三甲医院走访时,经常看到这样的「Excel 困境」:

场景 1:导出来就堆着

HIS 系统每天导出的手术明细、住院患者明细、医嘱明细……都堆在 D 盘「质控数据」文件夹,文件名命名混乱(20250617_手术明细.xlsx手术明细_6月17.xlsxnew_手术_0617.xlsx……),三个月后没人能找到上周的数据。

场景 2:手工关联,VLOOKUP 用一次忘一次

需要把「手术明细」和「并发症登记」关联,质控员知道要用 VLOOKUP,但每次用都要现查语法,「第 4 个参数是 FALSE 还是 TRUE 啊」「找不到匹配返回 #N/A 怎么办」——会用一次,下周又忘了

场景 3:透视表每次重建

每次做月报,都重新选数据范围、拖字段、改格式——本可以「刷新一下」就完事的报表,每次花 40 分钟重建

场景 4:格式乱、数据脏

日期是文本格式、数字前面有空格、同一个「科室」有「心内科」「心内」「心血管内科」三种写法——脏数据让所有后续分析都跑偏

这四个场景的共性是:质控员在 Excel 上「搬砖」,而不是用 Excel「自动化」

三、「Excel 自动化」的三层金字塔

把 Excel 的自动化能力拆成三层,每层对应不同的能力门槛和价值产出:

层级
工具
能力门槛
价值产出
第一层:函数
VLOOKUP / SUMIFS / IF / TEXT 等
低(2-3 周学会)
把「手工查找 + 计算」变成「自动」
第二层:数据透视表
PivotTable + 切片器 + 计算字段
中(1-2 周学会)
把「多维统计 + 交叉分析」从「几小时」压到「几分钟」
第三层:Power Query + Power Pivot + VBA
数据清洗 + 数据建模 + 自动化
高(2-3 个月学会)
把「每周重复动作」变成「一键刷新」

关键认知:90% 的质控场景,第一层 + 第二层就能解决。第三层是「极客玩法」,适合有深度自动化需求的质控员或质管办。

ℹ️老炮提醒

不要「跳级」学习——先把函数和数据透视表用熟(覆盖 80% 场景),再学 Power Query 和 VBA。函数不熟练直接学 VBA,等于没学会走先学跑。

四、质控场景对 Excel 的「特殊需求」

和普通办公场景不同,质控场景对 Excel 有三个「特殊要求」:

1. 数据更新频繁

质控数据每天、每周、每月都在更新。普通办公的 Excel 可能「做好就用一年」,质控 Excel 必须能「每周刷新、字段不乱、公式不丢」。

2. 字段多、字段含义复杂

一张质控表可能有 30-50 个字段(住院号、姓名、性别、年龄、入院日期、出院日期、主要诊断、其他诊断、手术名称、手术日期、术者、并发症、ICD 编码……),每个字段都有「口径定义」,任何一处错就会影响下游分析。

3. 需要追溯、可审计

质控数据是「证据」,出错会被医保飞检 / 三级评审 / 院长质询。所以 Excel 必须能追溯到原始数据 + 转换逻辑 + 责任人——这是为什么 Power Query(可追溯)比手工透视表(不可追溯)在质控场景更有价值。

到这里,我们讲清楚了「Excel 在医院为什么是基础设施」「质控员的 Excel 困境」「自动化的三层金字塔」。下一步,进入「怎么自动化」——10 类必备函数 + 5 个实战模板。

Part 2:实战进阶层——10 类必备函数 + 5 个实战模板

这一节是全文的「硬核干货」——我把质控场景高频用到的函数整理成 10 类,每个函数都给出「语法 + 质控场景 + 实战示例」。同时,我把 5 个最常用的质控模板做成「可下载结构」,你只要套上数据就能用。

一、10 类必备函数(质控场景)

第 1 类:VLOOKUP / XLOOKUP(关联 HIS 数据)

质控场景:把「手术明细」和「并发症登记表」按住院号关联,自动填充患者信息。

VLOOKUP 语法:

1
=VLOOKUP(查找值, 表格范围, 列序号, 匹配方式)

实战示例:在「并发症登记表」中,根据 A 列「住院号」,自动从「手术明细」中查找并填充「患者姓名」。

1
=VLOOKUP(A2, 手术明细!A:E, 2, FALSE)

XLOOKUP 语法(Excel 365 / 2021 新增,推荐):

1
=XLOOKUP(查找值, 查找数组, 返回数组, 未找到返回值)

实战示例:

1
=XLOOKUP(A2, 手术明细!A:A, 手术明细!B:B, "未找到")

XLOOKUP vs VLOOKUP:

  • VLOOKUP 只能向右查,XLOOKUP 可以向左、向右、向上、向下;
  • VLOOKUP 找不到返回 #N/A,XLOOKUP 可以自定义返回值;
  • VLOOKUP 列序号改了就错,XLOOKUP 直接选「返回数组」不会错。

质控场景小结:XLOOKUP 全面替代 VLOOKUP——学会 XLOOKUP,VLOOKUP 可以忘掉。

第 2 类:INDEX + MATCH(灵活查找)

质控场景:按「住院号 + 手术日期」双重条件查找某次手术的并发症情况(VLOOKUP 做不到)。

INDEX 语法:返回指定位置的值。

1
=INDEX(数组, 行号, 列号)

MATCH 语法:返回指定值在数组中的位置。

1
=MATCH(查找值, 查找数组, 匹配方式)

组合实战:

1
=INDEX(并发症表!D:D, MATCH(1, (并发症表!A:A=住院号)*(并发症表!B:B=手术日期), 0))

注意:这是数组公式,输入后按 Ctrl+Shift+Enter(旧版 Excel)或直接回车(Excel 365)。

质控场景小结:VLOOKUP 只能「单条件 + 向右查」,遇到多条件 / 向左查,必须 INDEX+MATCH

第 3 类:SUMIFS / COUNTIFS / AVERAGEIFS(条件聚合)

质控场景:统计某科室某月的「手术并发症例数」「平均住院日」「抗菌药物使用量」。

SUMIFS 语法:

1
=SUMIFS(求和范围, 条件范围1, 条件1, 条件范围2, 条件2, ...)

实战示例:统计心内科 2025 年 6 月的手术并发症总例数。

1
=SUMIFS(并发症表!E:E, 并发症表!C:C, "心内科", 并发症表!D:D, ">="&DATE(2025,6,1), 并发症表!D:D, "<"&DATE(2025,7,1))

COUNTIFS 实战:统计骨科 6 月的跌倒事件数。

1
=COUNTIFS(不良事件表!C:C, "骨科", 不良事件表!D:D, ">="&DATE(2025,6,1), 不良事件表!D:D, "<"&DATE(2025,7,1))

AVERAGEIFS 实战:统计 ICU 6 月的平均住院日。

1
=AVERAGEIFS(住院表!G:G, 住院表!C:C, "ICU", 住院表!F:F, ">="&DATE(2025,6,1))

质控场景小结:SUMIFS / COUNTIFS / AVERAGEIFS 是质控 Excel 的「三大金刚」——90% 的条件统计都能搞定。

第 4 类:IF / IFS / SWITCH(逻辑判断)

质控场景:根据指标值返回「达标 / 预警 / 失控」三色状态。

IF 实战:根据 CMI 值返回三色。

1
=IF(CMI>=1.2, "绿", IF(CMI>=1.0, "黄", "红"))

IFS 实战(Excel 2019+):

1
=IFS(CMI>=1.2, "绿", CMI>=1.0, "黄", CMI<1.0, "红")

SWITCH 实战:根据科室返回对应责任人。

1
=SWITCH(科室, "心内科", "张主任", "骨科", "李主任", "ICU", "王主任", "其他")

质控场景小结:IF 是最基础的逻辑函数,IFS 替代多层 IF 嵌套更清晰;SWITCH 适合「一对一映射」场景。

第 5 类:TEXT(日期格式化)

质控场景:HIS 导出的日期是「20250617」数字格式,Excel 不认识,需要转成「2025-06-17」。

TEXT 实战:

1
2
3
4
=TEXT(日期单元格, "yyyy-mm-dd")     ' 输出 2025-06-17=TEXT(日期单元格, "yyyy年m月d日")   ' 输出 2025年6月17日=TEXT(日期单元格, "aaaa")           ' 输出星期几(中文)=TEXT(日期单元格, "hh:mm:ss")       ' 输出 14:30:25

质控场景小结:TEXT 是质控 Excel 的「翻译官」——任何奇怪的格式都能转成你想要的。

第 6 类:DATE / EDATE / DATEDIF(日期计算)

质控场景:计算「不良事件 N 天内上报」「术后 30 天再入院」「抗菌药物使用疗程」。

DATE 实战:把年月日数字拼成日期。

1
=DATE(2025, 6, 17)

EDATE 实战:N 个月后的日期(如手术后 30 天随访日期)。

1
2
=EDATE(手术日期, 1)    ' 术后 1 个月=EDATE(手术日期, 3)    ' 术后 3 个月

DATEDIF 实战:两个日期相差多少天 / 月 / 年。

1
2
=DATEDIF(入院日期, 出院日期, "d")    ' 住院天数=DATEDIF(手术日期, 上报日期, "d")    ' 不良事件上报天数

质控场景小结:EDATE 是「未来日期计算神器」,DATEDIF 是「时间差计算神器」——质控员必须熟练。

第 7 类:ROUND / FLOOR / CEILING(数值精度)

质控场景:DDDs(抗菌药物使用强度)保留 2 位小数,百分比保留 1 位小数。

ROUND 实战:

1
2
=ROUND(DDDs, 2)        ' 保留 2 位小数=ROUND(百分比, 1)      ' 保留 1 位小数

FLOOR 实战:向下取整(用于「不足 1 按 0 算」)。

1
=FLOOR(抗菌药物使用量, 0.01)

CEILING 实战:向上取整(用于「床位数向上取整」)。

1
=CEILING(床位使用率, 0.05)    ' 向上取整到 5% 倍数

质控场景小结:质控报表的「精度规范」必须严格执行——ROUND 是基本功。

第 8 类:LEN / LEFT / RIGHT / MID(文本提取)

质控场景:从「病案号」中提取年份、提取 ICD 编码的类目。

LEN 实战:计算文本长度。

1
=LEN("BJ123456")    ' 返回 9

LEFT 实战:从左取 N 个字符(提取病案号前 2 位 = 年份)。

1
=LEFT(病案号, 2)    ' "BJ123456" → "BJ"

RIGHT 实战:从右取 N 个字符(提取 ICD 编码的亚目)。

1
=RIGHT(ICD编码, 3)  ' "I25.102" → "102"

MID 实战:从中间取字符(提取身份证中的出生年月)。

1
=MID(身份证号, 7, 8)  ' "110101199003078888" → "19900307"

质控场景小结:LEFT / RIGHT / MID 是质控 Excel 的「手术刀」——任何字符串都能精准切片。

第 9 类:CONCATENATE / TEXTJOIN(拼接)

质控场景:把「姓名 + 性别 + 年龄」拼成一列;把多个并发症用「、」连接。

CONCATENATE 实战(或 &):

1
2
=CONCATENATE(姓名, "(", 性别, ",", 年龄, "岁)")=姓名 & "(" & 性别 & "," & 年龄 & "岁)"

TEXTJOIN 实战(推荐):用分隔符拼接多个值。

1
=TEXTJOIN("、", TRUE, 并发症1, 并发症2, 并发症3)

质控场景小结:TEXTJOIN 比 CONCATENATE 更强大——可以自动忽略空值,可以指定分隔符。

第 10 类:IFERROR / ISERROR(错误处理)

质控场景:VLOOKUP 找不到匹配返回 #N/A,污染整张表的美观。

IFERROR 实战:

1
2
=IFERROR(VLOOKUP(A2, 手术明细!A:E, 2, FALSE), "未匹配")=IFERROR(XLOOKUP(A2, 手术明细!A:A, 手术明细!B:B), "未匹配")

质控场景小结:IFERROR 是质控 Excel 的「兜底神器」——任何 #N/A#DIV/0!#VALUE! 都能优雅处理。

💡10 类函数速查表

| 序号 | 函数 | 质控场景 | 优先级 | |—|—|—|—| | 1 | VLOOKUP / XLOOKUP | 关联 HIS 数据 | ★★★★★ | | 2 | INDEX + MATCH | 多条件查找 | ★★★★ | | 3 | SUMIFS / COUNTIFS / AVERAGEIFS | 条件聚合 | ★★★★★ | | 4 | IF / IFS / SWITCH | 逻辑判断 | ★★★★★ | | 5 | TEXT | 日期格式化 | ★★★★ | | 6 | DATE / EDATE / DATEDIF | 日期计算 | ★★★★ | | 7 | ROUND / FLOOR / CEILING | 数值精度 | ★★★ | | 8 | LEN / LEFT / RIGHT / MID | 文本提取 | ★★★★ | | 9 | CONCATENATE / TEXTJOIN | 拼接 | ★★★ | | 10 | IFERROR / ISERROR | 错误处理 | ★★★★★ |

10 类函数全部学会,质控 Excel 的「自动化」就完成了 70%。

二、5 个实战模板(可下载)

光讲函数不够,我要给你「开箱即用」的模板。下面 5 个模板是质控场景最高频的,你只要把数据填进去,函数已经帮你算好。

模板 1:不良事件登记台账

字段设计:

字段
类型
函数应用
事件编号
文本
自动生成
报告日期
日期
数据验证
事件类型
下拉
数据验证
发生科室
下拉
数据验证
患者姓名
文本
住院号
文本
事件经过
文本
严重程度
下拉
IF 三色
N 天内上报
数字
DATEDIF
上报是否及时
文本
IF
责任人
文本
XLOOKUP
改进措施
文本
关闭日期
日期
关闭天数
数字
DATEDIF

核心公式:

1
2
3
4
5
# 上报是否及时(目标:24 小时内)=IF(DATEDIF(发生日期, 报告日期, "h")<=24, "及时", "不及时")# 关闭天数=IF(关闭日期="", "未关闭", DATEDIF(发生日期, 关闭日期, "d"))

模板 2:病案首页核查表

核心字段:住院号、主要诊断、其他诊断、手术名称、主要手术 ICD、病理诊断、损伤中毒原因、过敏药物。

核心公式:

1
2
3
4
5
# 主要诊断编码是否规范=IF(REGEXTEST(主要诊断ICD, "^[A-Z]\\d{2}\\.\\d{1,2}x?$"), "规范", "不规范")# 病理诊断漏报检查=IF(手术类别="手术" AND 病理诊断="", "漏报", "正常")

模板 3:临床路径变异登记表

核心字段:住院号、入径日期、变异日期、变异类型(退出 / 偏离 / 延长)、变异原因、责任医师。

核心公式:

1
2
3
4
5
# 变异率=COUNTIFS(变异类型, "<>"&"正常") / COUNTA(住院号)# 平均住院日 vs 路径标准住院日=DATEDIF(入径日期, 出径日期, "d") - 标准住院日

模板 4:抗菌药物使用强度(DDDs)计算

DDDs = (抗菌药物消耗量 × 规格) / DDD 值(WHO(世界卫生组织)规定)。

核心公式:

1
2
3
4
5
6
7
8
# 单药品 DDDs=SUMIFS(药品消耗量, 药品名称, "头孢呋辛") * 规格 / DDD值# 全院 DDDs=SUM(各药品DDDs)# DDDs / 100 人天=全院DDDs / (出院患者数 * 平均住院日) * 100

模板 5:质控指标月度追踪表

核心字段:指标名称、目标值、上月值、本月值、同比、环比、三色状态、责任人、改进措施。

核心公式:

1
2
3
4
5
6
7
8
# 同比=(本月值 - 上年同期) / 上年同期# 环比=(本月值 - 上月值) / 上月值# 三色状态=IFS(ABS((本月值-目标值)/目标值)<=0.1, "绿", ABS((本月值-目标值)/目标值)<=0.25, "黄", TRUE, "红")
💡模板使用建议

上面 5 个模板的完整版(带 VBA 自动填充 + 数据验证 + 条件格式 + 透视表)可以在文末「30 天行动清单」中下载链接获取。不要自己从零做表,先下载模板,在模板上改字段——效率提升 10 倍。

三、数据透视表深度用法

数据透视表(PivotTable)是 Excel 的「第二神器」(第一是函数),质控场景必须用透。

基础用法回顾:插入 → 数据透视表 → 拖字段到「行 / 列 / 值 / 筛选」。

进阶用法 1:多维度交叉

把「科室」拖到行,「月份」拖到列,「并发症例数」拖到值——一张透视表 = 一张「科室 × 月份」并发症热力图

进阶用法 2:字段分组

右键日期字段 → 分组 → 按「月 / 季 / 年」——把每日数据自动汇总成月度数据

进阶用法 3:计算字段

透视表工具 → 字段、项目和集 → 计算字段——在透视表内自定义公式(如「DDDs / 100 人天」)。

进阶用法 4:切片器联动

插入 → 切片器 → 选择「科室 / 月份 / 指标类型」——切片器一拖,所有透视表同步刷新,这是「可视化交互」的精髓。

质控实战:某质管办的「月度指标看板」= 5 张透视表(手术并发症 / 院内感染 / 不良事件 / 平均住院日 / 患者满意度)+ 3 个切片器(科室 / 月份 / 指标类型),切片器一拖,所有指标联动

四、质控 Excel 自动化 Checklist(10 项)

把这套函数 + 模板 + 透视表落地到日常,需要一张 10 项 Checklist:

序号
核查项
数据来源
责任人
1
5 个核心模板是否已上线(不良事件、病案首页、变异登记、DDDs、指标追踪)
模板台账
质控员
2
模板覆盖率是否达 100%(所有质控数据走模板)
模板使用日志
质控员
3
关键函数是否全员熟练(XLOOKUP / SUMIFS / IFERROR)
培训签到 + 上机考核
质管办
4
函数使用率是否 > 80%(替代手工查找 / 计算)
Excel 抽样审查
质管办
5
数据透视表是否替代手工透视
模板抽样
质控员
6
数据透视表是否配切片器
模板审查
信息科
7
自动化率(每周报表中「一键刷新」占比)是否 > 50%
报表台账
质管办
8
数据准确率(抽查 100 条 vs HIS)是否 > 99%
抽样核查
质管办
9
错误处理(IFERROR 覆盖率)是否 > 90%
公式审查
质控员
10
模板版本管理(Sheet 命名 + 修改日期)是否规范
文件命名审查
质管办
💡Checklist 落地

把这张 Checklist 嵌入质管办每月例会,设置「季度自评 + 年度 audit」机制。没有 Checklist 的工具化,等于「Excel 用得很熟但效率没提升」。

到这里,10 类函数 + 5 个模板 + 数据透视表 + Checklist 都讲完了。但这只是「第一层 + 第二层」的自动化——下一步,我们看极客层面的 Power Query、Power Pivot、VBA,怎么让自动化从「半自动」升级到「全自动」。

Part 3:极客升维层——从「半自动」到「全自动」

前面的函数和数据透视表解决了「手工 → 半自动」。但每周还要手动「导出 → 复制 → 刷新」,能不能「每周一点击,全自动出表」?能——这就需要 Power Query、Power Pivot、VBA。

一、Power Query:自动数据清洗

Power Query 是什么?

Power Query 是 Excel 内置的「ETL 工具」(Extract-Transform-Load,数据抽取-转换-加载)。它能把「脏数据」自动清洗成「干净数据」,而且 清洗步骤可追溯、可复用、可一键刷新

质控场景:每周一从 HIS 导出「手术明细」,但每周的字段顺序不一样、有空行、有重复行、有格式错误——手动清洗每次 30 分钟。用 Power Query,每周一点击「刷新」,自动完成清洗

Power Query 实战 5 步:

  1. 数据 → 获取数据 → 从文件 → 从工作簿 —— 选中 HIS 导出的 Excel;
  2. Power Query 编辑器 —— 删除空行、删除重复行、改字段类型、合并查询;
  3. 应用并关闭 —— 数据加载回 Excel;
  4. 下次直接「数据 → 全部刷新」 —— 重新执行所有步骤;
  5. 数据源变更 —— 把新文件覆盖到原路径,再次「全部刷新」即可。

典型清洗步骤:

步骤
操作
应用场景
删除行
「删除空行」「删除错误行」「删除前 N 行」
去掉导出的标题、合计行
改类型
「将列改为数字 / 日期 / 文本」
解决「日期是数字」「数值是文本」
替换值
「将『心内』替换为『心内科』」
统一科室名称
合并查询
「VLOOKUP 式合并」
把手术明细和并发症关联
追加查询
「纵向合并多个月份的数据」
把 12 个月的周报合并成月报
分组依据
「按科室分组求和」
透视前的预聚合

质控价值:数据清洗的「可追溯」是质控数据的核心要求——Power Query 的每一步都有「应用步骤」记录,医保飞检 / 三级评审时可以打开看「数据怎么来的」。

二、Power Pivot:数据建模 + DAX 度量值

Power Pivot 是什么?

Power Pivot 是 Excel 内置的「数据建模工具」,可以建立「多表关系」(类似数据库),用 DAX(Data Analysis Expressions,数据分析表达式)函数 写度量值。

质控场景:你有 5 张表(手术明细、并发症登记、抗菌药物使用、患者基本信息、科室字典),想做一个「按科室 + 时间」的多维分析——传统透视表只能分析单表,Power Pivot 可以 多表关联 + DAX 度量值

Power Pivot 实战 3 步:

  1. Power Pivot → 管理工作区 —— 把 5 张表加载进来;
  2. 关系图视图 —— 拖线建立「住院号」关联、「科室编码」关联;
  3. DAX 度量值 —— 写公式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# DDDs / 100 人天DDDs_per_100 = DIVIDE(    SUM(抗菌药物使用[DDDs]),    SUM(出院患者[住院天数]) / 100)# 手术并发症率并发症率 = DIVIDE(    COUNTROWS(FILTER(并发症, 并发症[严重程度]="中度及以上")),    COUNTROWS(手术明细),    0)
  1. 数据透视表 / 透视图 —— 用 Power Pivot 数据源做透视,所有 DAX 度量值可以拖到「值」区域。

质控价值:多表关联 + DAX 度量值 = Excel 版「数据仓库」——不用上 SQL Server,不用学 Python,直接在 Excel 里做。

三、VBA 自动化:从「半自动」到「全自动」

VBA 是什么?

VBA(Visual Basic for Applications)是 Excel 内置的「编程语言」,可以 自动化任何重复动作(录入、填表、生成报表、发邮件……)。

质控场景:每周一上午,质控员要做 3 件事——导 HIS 数据、跑 5 个模板、发周报给院长。VBA 可以把这 3 件事 一键完成

VBA 实战 1:批量填充日报

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub 一键生成手术日报()    ' 1. 从 HIS 导出当日手术明细    Workbooks.Open "D:\质控数据\HIS\手术明细.xlsx"    Sheets("手术明细").Copy ThisWorkbook.Sheets.Add    ' 2. 用 XLOOKUP 关联并发症登记    Range("F2:F1000").Formula = "=XLOOKUP(A2, 并发症表!A:A, 并发症表!C:C, """")"    ' 3. 用 COUNTIFS 统计各科室并发症    Range("H2:H30").Formula = "=COUNTIFS(C:C, J2, F:F, ""并发症"")"    ' 4. 格式化 + 保存    ActiveSheet.Name = "手术日报_" & Format(Date, "yyyymmdd")    ThisWorkbook.SaveEnd Sub

VBA 实战 2:自动发邮件周报

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub 自动发周报()    ' 1. 生成周报 PDF    ThisWorkbook.ExportAsFixedFormat xlTypePDF, "D:\周报\周报_" & Format(Date, "yyyymmdd") & ".pdf"    ' 2. 创建邮件    Dim OutApp As Object, OutMail As Object    Set OutApp = CreateObject("Outlook.Application")    Set OutMail = OutApp.CreateItem(0)    With OutMail        .To = "院长@example.com"        .Subject = "本周质控周报 - " & Format(Date, "yyyy-mm-dd")        .Body = "院长,本周质控周报见附件。如有红色报警请及时关注。"        .Attachments.Add "D:\周报\周报_" & Format(Date, "yyyymmdd") & ".pdf"        .Send    End WithEnd Sub

VBA 实战 3:一键生成月报 + 上传 BI

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub 一键生成月报()    ' 1. 刷新所有 Power Query    ThisWorkbook.RefreshAll    ' 2. 等待刷新完成    Application.CalculateUntilAsyncQueriesDone    ' 3. 导出月报    Sheets("月报模板").ExportAsFixedFormat xlTypePDF, "D:\月报\月报_" & Format(Date, "yyyymm") & ".pdf"    ' 4. 提示完成    MsgBox "月报已生成!"End Sub

质控价值:VBA 是 Excel 自动化的「终极形态」——任何重复动作都能固化成一键执行。

⚠️VBA 学习曲线

VBA 不是「必须学」——90% 的质控场景,函数 + 数据透视表 + Power Query 已经足够。只有当你每周重复动作超过 3 次,才值得花时间学 VBA

四、Excel + Power BI 联动:从「个人自动化」到「组织可视化」

场景:质管办要做「全院指标驾驶舱」(参考 P27 的指标驾驶舱设计),但 BI 系统采购周期长、改造困难——能不能先用 Excel + Power BI 联动,快速出一个原型?

——而且推荐这样过渡。

Excel + Power BI 联动三步:

  1. 在 Excel 里用 Power Query 清洗好数据;
  2. 发布到 Power BI 服务(Power BI → 发布到 Power BI 服务);
  3. 在 Power BI Desktop 里做可视化(关系图、DAX 度量值、图表);
  4. 在 Power BI 服务里发布给全院访问;
  5. 继续在 Excel 里维护数据源 —— Excel 改动 → Power BI 一键刷新。

质控价值:Excel 是 Power BI 的「数据源 + 数据清洗前端」——质控员熟悉 Excel,数据落到 Excel;Power BI 是「可视化 + 分享后端」——给院领导、科室主任看。

五、Excel 自动化三层架构图

关键说明:

  • 第一层(数据源): 脏数据,直接用会错;
  • 第二层(Power Query): 清洗,所有「应用步骤」可追溯;
  • 第三层(Power Pivot): 建模,多表关联 + DAX 度量值;
  • 第四层(可视化 + 自动化): Excel 透视表 / Power BI / VBA,按需选用。

到这里,极客层面的 Power Query + Power Pivot + VBA + Power BI 联动都讲完了。但「会用」不等于「真用」——下一节,走进一个真实案例,看质控员是怎么从「手工 3 小时」蜕变成「一键 5 分钟」的。

Part 4:真实案例——某三甲医院质控员「Excel 极客养成记」

2025 年,粤港澳大湾区某三甲医院(化名「盐田中心」,开放床位 1800 张,日均手术 80 台)质管办,质控员小林(化名)的「Excel 极客养成记」。

一、起点:每周二固定「3 小时」

2025 年 1 月,小林每周二上午的「手术并发症周报」流程:

  1. 9:00-10:00 从 HIS 导出上周手术明细(1 个 Excel);
  2. 10:00-10:40 从病案系统导出并发症登记表(1 个 Excel);
  3. 10:40-11:30 手工 VLOOKUP 关联两份表,填充并发症标记;
  4. 11:30-12:00 手工透视表算各科室并发症率;
  5. 12:00-12:40 改格式、画图、写分析;
  6. 12:40-13:00 上传周报到 OA(办公自动化系统)给院长。

总耗时 3 小时,每周如此,雷打不动。

二、转折:院内「Excel 极客」培训

2025 年 2 月,医院请了一位「Excel 极客」来做培训,主题是「用 Excel 实现质控自动化」。小林听了 2 天课,学到 4 个关键技能:

  1. XLOOKUP 替代 VLOOKUP —— 关联效率提升 50%;
  2. 数据透视表 + 切片器 —— 多维分析从「半小时」压到「5 分钟」;
  3. Power Query 自动清洗 —— 脏数据不用手工改;
  4. VBA 一键执行 —— 每周重复动作固化成宏。

回来后,小林花了 2 周 把这套技能落地到自己的工作流。

三、改造:2 周后「3 小时 → 30 分钟」

第 1 周:模板化

  • 把「手术并发症周报」的所有字段、公式、透视表固化成 1 个 Excel 模板;
  • 公式全部用 XLOOKUP + IFERROR + 三色状态;
  • 数据透视表 + 切片器联动。

第 2 周:Power Query + VBA

  • Power Query 连接 HIS 导出文件,清洗步骤固定;
  • VBA 一键执行:「打开模板 → 自动从 HIS 文件夹读取 → 跑清洗 → 跑透视 → 生成周报 → 保存到固定路径」。

改造后效果:

步骤
改造前
改造后
导出数据
1 小时(手工操作)
0
(VBA 自动读固定文件)
数据清洗
50 分钟(手工改格式)
0
(Power Query 自动清洗)
关联两份表
50 分钟(手工 VLOOKUP)
0
(XLOOKUP 公式自动)
透视表分析
30 分钟(手工拖字段)
2 分钟
(透视表 + 切片器)
改格式 + 画图
40 分钟(手工)
3 分钟
(条件格式 + 模板)
上传周报
20 分钟(手工上传)
0
(VBA 自动保存到固定路径)
总耗时3 小时5 分钟

3 小时 → 5 分钟,效率提升 36 倍。

四、半年后:从「质控员」到「质控极客」

半年后,小林不只改造了「手术并发症周报」,还改造了:

  • 病案首页核查表 —— 用 Power Query 自动校验 200+ 条规则;
  • 不良事件月度分析 —— 用 VBA 一键生成 PDF 月报,自动发邮件;
  • 抗菌药物 DDDs 月报 —— 用 Power Pivot 多表关联 + DAX 度量值;
  • 全院指标驾驶舱原型 —— Excel + Power BI 联动,先给院长看原型。

小林的职级:从「质控员」晋升为「质控数据分析师」(新增岗位),月薪上调 30%。

小林带出来的「极客文化」:质管办 6 人全员学会 Power Query,3 人学会 VBA,1 人学会 Power Pivot——质管办从「手工搬砖」升级为「数据驱动」。

五、经验教训:三句话留给同行

📋三条经验
  1. 「3 小时」不是 Excel 的极限,是你的极限——小林的经历证明,Excel 配 Power Query + VBA,能把「3 小时」压到「5 分钟」。任何质控场景的「重复动作」,都值得用自动化改造。
  2. 从「模板化」开始,不要直接上 VBA——小林的路径是:函数 → 透视表 → Power Query → VBA。跳级学习 = 浪费 50% 时间
  3. Excel 极客不是「会写 VBA」,是「能识别重复动作」——真正的极客能力是「看到一份手工报表,3 秒内识别出哪些步骤可以自动化」。

到这里,4 个层级都拆完了。最后,我们给出 30 天行动清单 + P36 预告。

结语:Excel 极客,是质控员的「第一生产工具」

回到开头的那个场景。

小林的桌面现在很清爽——左屏只开 1 个 Excel 模板,右屏开着「手术并发症周报」自动生成的 PDF。

她的每周二上午,变成了这样:

  • 9:00 打开模板,点「刷新」,Power Query 自动从 HIS 文件夹读取数据;
  • 9:02 数据清洗完成,自动跑透视表;
  • 9:03 切片器拖一下,自动生成可视化;
  • 9:05 点「导出 PDF」,自动发邮件给院长。

5 分钟,完成原来 3 小时的工作。

这不是「魔法」——这是 Excel 函数 + 数据透视表 + Power Query + VBA 四个工具组合的结果。

而 P35 想告诉你的是:Excel 极客不是少数人的专利,是每个质控员都可以掌握的能力。

全文三句话

一句话总结
  1. Excel 在中国医院是「基础设施」,但 90% 的医院只用到了 10% 的能力——质控员从「搬砖」变「极客」,差距就在「函数 + 透视表 + Power Query + VBA」这四件武器。
  2. 10 类函数 + 5 个模板 = 质控 Excel 自动化的「基础弹药」——XLOOKUP、SUMIFS、IFERROR 必须熟练;5 个模板开箱即用,套数据就行。
  3. 极客层的 Power Query + Power Pivot + VBA 是「终极武器」——能把每周「3 小时」变成「5 分钟」,但要按「函数 → 透视表 → Power Query → VBA」路径递进,不要跳级。

30 天行动起点:明天就能做的 18 件事

💡给质控员的「Excel 极客 30 天行动清单」

| 天数 | 动作 | 输出物 | 责任人 | |—|—|—|—| | Day 1 | 全院盘点:你每周在 Excel 上花多少小时?花在哪些「重复动作」上? | 《质控 Excel 工作流盘点表》 | 质控员 | | Day 2 | 选出 1 个「最花时间」的报表(如手术并发症周报) | 选定目标报表 | 质控员 | | Day 3 | 列出这个报表的「10 个步骤」,标记哪些可以自动化 | 步骤拆解表 | 质控员 | | Day 4 | 下载 / 自建 5 个核心模板(不良事件 / 病案首页 / 变异登记 / DDDs / 指标追踪) | 5 个 Excel 模板 | 质控员 | | Day 5 | XLOOKUP 替代 VLOOKUP,所有关联公式升级 | 函数升级 | 质控员 | | Day 6 | 关键公式加 IFERROR,消灭所有 #N/A | 错误处理 | 质控员 | | Day 7 | 用 SUMIFS / COUNTIFS 重写所有「条件统计」 | 公式升级 | 质控员 | | Day 8 | 用 IFS 重写所有「多层 IF 嵌套」 | 公式升级 | 质控员 | | Day 9 | 用 TEXT 重写所有「日期格式化」 | 公式升级 | 质控员 | | Day 10 | 用 DATEDIF / EDATE 重写所有「日期计算」 | 公式升级 | 质控员 | | Day 11 | 把 1 张手工透视表升级为「透视表 + 切片器 + 条件格式」 | 透视表升级 | 质控员 | | Day 12 | 用 Power Query 清洗 1 个数据源(HIS 导出的手术明细) | Power Query 模板 | 质控员 | | Day 13 | 用 Power Query 合并 2 个数据源(手术明细 + 并发症登记) | 合并查询 | 质控员 | | Day 14 | 用 Power Pivot 关联 3 张表,写 1 个 DAX 度量值 | 数据模型 + DAX | 质控员 | | Day 15 | 学 VBA 基础:打开 VBA 编辑器、录第一个宏 | VBA 入门 | 质控员 | | Day 16 | 写 1 个 VBA 宏:「一键打开模板 + 刷新数据」 | VBA 脚本 | 质控员 | | Day 17 | 写 1 个 VBA 宏:「一键导出 PDF + 自动命名」 | VBA 脚本 | 质控员 | | Day 18 | 把目标报表全流程 VBA 化(一键执行) | VBA 全流程脚本 | 质控员 | | Day 19-25 | 试运行 1 周,记录耗时 vs 改造前 | 试运行日志 | 质控员 | | Day 26 | 评估改造效果(节省时间 / 错误率 / 满意度) | 改造效果报告 | 质控员 | | Day 27 | 把改造经验分享给质管办全员,启动「极客训练营」 | 培训 PPT + 模板 | 质控员 | | Day 28 | 全员培训 Day 1:10 类函数 + 5 个模板 | 培训签到 + 录像 | 质管办 | | Day 29 | 全员培训 Day 2:数据透视表 + Power Query 入门 | 培训签到 + 录像 | 质管办 | | Day 30 | 30 天复盘:出《P35 30 天落地报告》,规划下一阶段 | 30 天报告 | 质控员 |

30 天,从一个「重复动作」开始,蜕变成「Excel 极客」。 Day 1 必须今天盘点,Day 30 必须 30 天后出报告——这就是质控员的节奏。


ℹ️系列预告
  • P36 Python 入门: Excel 极客的下一站——当 Excel 不够用时,Python 怎么接管「百万行级」质控数据?
  • P37 Power BI 实战: 从「Excel 模板」到「全院大屏」——Power BI 如何把质控员的个人自动化升级为「组织可视化」?
  • P38 SQL 入门: 质控员和「数据中台」的桥梁——读懂 HIS 数据库,做「真数据」的主人

关注「质领未来」,每一篇,都让质管人少走一年弯路。 留言区留下你 用 Excel 函数 / 透视表 / VBA 改造过的质控场景(比如小林的「3 小时变 5 分钟」、DDDs 自动计算、月报一键生成、不良事件自动提醒……),狼叔会在 P36-P38 里挑 3 个高频「极客玩法」做深度拆解。


《质效精研》P35 · 极客工具:Excel 不只是表格,用函数实现质控自动化

📖 扩展阅读:

器数维新 | 常用质量管理图表实战:从表格到热力图,把医院数据"画"出洞察

狼叔造了个小小小工具:每月手工拼半天Excel,现在5分钟搞定——奖罚通知自动生成器

医数智联·第 15 期:pandas 入门 —— 首页数据的「Excel 终结者」,DataFrame 10 大操作

医数智联·第 03 期:Obsidian Dataview —— 把笔记变成「数据库」,质控台账不再靠 Excel

医数智联·第 10 期:MySQL + DRG 入组异常筛查 —— 让医保结算少扣钱的「关键防线」

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-09 06:03:58 HTTP/2.0 GET : https://h.sjds.net/a/549020.html
  2. 运行时间 : 0.107013s [ 吞吐率:9.34req/s ] 内存消耗:4,601.10kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=45ed05c68a24cf47b3e45014fe2bb6e0
  1. /yingpanguazai/ssd/ssd1/www/h.sjds.net/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/h.sjds.net/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/h.sjds.net/runtime/temp/ad153693ed39fba6d1bda2fe72512cde.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000628s ] mysql:host=127.0.0.1;port=3306;dbname=h_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000768s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000300s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000310s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000531s ]
  6. SELECT * FROM `set` [ RunTime:0.000266s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000601s ]
  8. SELECT * FROM `article` WHERE `id` = 549020 LIMIT 1 [ RunTime:0.000603s ]
  9. UPDATE `article` SET `lasttime` = 1786226638 WHERE `id` = 549020 [ RunTime:0.001310s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000286s ]
  11. SELECT * FROM `article` WHERE `id` < 549020 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000495s ]
  12. SELECT * FROM `article` WHERE `id` > 549020 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001624s ]
  13. SELECT * FROM `article` WHERE `id` < 549020 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000964s ]
  14. SELECT * FROM `article` WHERE `id` < 549020 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001566s ]
  15. SELECT * FROM `article` WHERE `id` < 549020 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000797s ]
0.108573s