Excel 交付体检(xlsx 结构审计)
何时使用
- 用户要交付一个
.xlsx,想确认「能不能发出去」 - 用户怀疑表格公式有问题、改了数之后求和不对
- 用户想排查表格里有没有隐藏的行/列/工作表、草稿数据
- 用户关心文档会不会泄露作者信息(元数据、外部链接)
不做什么
- 只查不改:绝不修改源文件,只输出报告
- 只支持
.xlsx(不支持.xls旧格式,提示用户先另存为 .xlsx) - 不做公式生成、数据清洗、图表美化(那些是别的 skill 的事)
怎么用
核心脚本是 scripts/audit.py,纯 Python 标准库、零依赖:
python scripts/audit.py <文件.xlsx> # 直接打印 Markdown 报告
python scripts/audit.py <文件.xlsx> --out r.md # 报告写到文件
python scripts/audit.py <文件.xlsx> --json # 输出 JSON(给 Agent/上层用)
检查项(14 项,按风险分级)
🔴 阻断级(会被甲方/领导直接看到,或造成事故)
| 代码 | 检查项 | 说明 |
|---|---|---|
| E01 | 错误值残留 | #REF! #DIV/0! #NAME? 等 |
| E02 | 跨表引用指向不存在的工作表 | 删表后公式残留 |
| E03 | 外部链接 | 指向作者本机路径,泄露隐私 |
| E04 | veryHidden 隐藏工作表 | 界面里无法手动取消隐藏 |
| E05 | 自引用/循环引用 | 公式引用自己 |
🟡 交付级(格式/规范问题)
| 代码 | 检查项 | 说明 |
|---|---|---|
| W01 | 公式引用范围漏行 | 求和/求均值漏了最后一行 |
| W02 | 元数据残留 | 作者/最后保存者/公司字段 |
| W03 | 隐藏行/列残留 | 辅助列、草稿数据 |
| W04 | 隐藏工作表 | state=hidden |
| W05 | 合并单元格 | 导致筛选/排序/透视失效 |
| W06 | 数字存成文本 | 求和=0、透视表算不出 |
| W07 | 定义名称失效 | 指向 #REF! |
🔵 建议级
| 代码 | 检查项 |
|---|---|
| B01 | 单元格首尾空格 |
| B02 | 易失函数 / 全列引用 |
输出样例
# Excel 交付体检报告
源文件:XX月对账表.xlsx(3 个工作表,128 个单元格)
体检结果:🔴 2 个阻断问题,🟡 3 个交付问题,🔵 1 个建议
🔴 [E02] 跨表引用指向不存在的工作表(对账!E2)
公式引用了 Sheet99,但工作簿里没有这个表
边界与安全
- 只读:全程不写源文件,报告独立输出
- 本地:纯本地解包,不发任何网络请求
- 文件大小:建议 < 50MB(超大文件解包慢,可提示用户)
常见问题(FAQ)
Q:为什么不支持 .xls 老格式?
A:.xls 是二进制格式,结构完全不同。请用 WPS/Excel「另存为」选择 .xlsx 再体检。
Q:提示「无法读取文件」或「不是有效的 .xlsx」怎么办?
A:通常说明文件已损坏,或不是有效的 .xlsx(比如改了后缀的其他格式,或 WPS 另存失败导致文件不完整)。先确认文件能正常打开,再重新体检。若文件本身就是坏的,本工具无法修复,需从原软件重新导出。
Q:超大文件(>50MB)会卡吗?
A:会明显变慢。建议拆分成多个工作表,或只对要交付的那部分做体检。
Q:检查结果一定准确吗?
A:不是。尤其「公式引用范围漏行」是启发式判断,可能误报,报告中标注为「疑似」,需人工确认。复杂循环引用(多单元格互相成环)本版只检测「自引用」这一种。
Q:会修改我的文件吗?
A:不会。全程只读,报告独立输出,绝不写源文件。
Q:能查 .docx / .pptx 吗?
A:本版只支持 .xlsx。Word/PPT 的结构检查是后续方向。
Q:想要批量检查、交付报告、CI 集成怎么办?
A:用 Pro 版「Excel 交付体检 Pro」(xlsx-delivery-audit-pro):25+ 项深度检查、
批量目录体检、带 SHA-256 与结论章的 HTML 交付报告、--fail-on 挂流水线、基线忽略误报。
本免费版适合单文件的轻量体检,两者检查口径一致。