Vibe Coding 100 天挑战 · Day 19
两版 Excel 到底改了哪里?我做了一个差异对比器
很多表格不是一次写完的。
预算表会改,名单会改,报价单会改,项目排期也会改。最麻烦的是,别人常常只发你一句:“这是最新版,你看下。”
问题来了:最新版到底新在哪里?
如果只有十几行,还能靠肉眼扫;如果是几百行、多个工作表、几轮来回修改,靠人工找差异就很容易漏。漏掉一个金额、一个状态、一个日期,后面可能就是一串沟通成本。
今天做的工具叫 excel-diff。它只做一件事:对比两版 .xlsx 文件,生成一份带高亮的差异报告。
这次 MVP 解决什么问题?
excel-diff 面向的是很常见的办公场景:
同事发来一版更新后的名单,想知道新增了哪些人。 客户改了报价单,想知道哪些金额变了。 项目排期来回调整,想快速定位日期和负责人变化。 多个工作表混在一个文件里,想先知道哪些 sheet 被新增或删除。
它不会试图变成一个完整的 Excel 协作平台,只是把“肉眼找不同”这件事变成一条命令。
现在支持什么?
这一版 MVP 支持:
对比两个 .xlsx文件。检测新增工作表。 检测删除工作表。 检测新增单元格。 检测删除单元格。 检测修改单元格。 把空字符串和空单元格都当作空值处理。 输出一份 Excel 差异报告。 在报告里用不同颜色区分新增、删除、修改。 可选输出 JSON,方便后续接自动化流程。 支持 --data-only,用于读取公式缓存值而不是公式文本。
报告里会有两个工作表:
Summary | |
Diff |
怎么使用?
安装依赖:
python -m pip install -r requirements.txt对比两个表格:
python src\excel_diff.py examples\old.xlsx examples\new.xlsx -o examples\diff-report.xlsx如果还想额外生成 JSON 明细:
python src\excel_diff.py examples\old.xlsx examples\new.xlsx -o examples\diff-report.xlsx --json examples\diff.json如果表格里有公式,且你想对比公式缓存出来的值:
python src\excel_diff.py examples\old.xlsx examples\new.xlsx -o examples\diff-report.xlsx --data-only运行后会看到类似输出:
旧版: examples\old.xlsx新版: examples\new.xlsx差异总数: 8新增单元格: 2删除单元格: 0修改单元格: 4新增工作表: 1删除工作表: 1报告: examples\diff-report.xlsx打开 diff-report.xlsx,就能看到每一处变化。
差异是怎么判断的?
这一版采用最朴素、也最容易理解的对比方式:按工作表名称和单元格坐标对齐。
第一步,对比工作表名称。
如果新版里有、旧版里没有,就是新增工作表;如果旧版里有、新版里没有,就是删除工作表。
第二步,对比共同工作表里的单元格。
工具会遍历旧版和新版共同覆盖的行列范围,读取每个单元格的值,然后判断:
旧值为空,新值不为空:新增单元格。 旧值不为空,新值为空:删除单元格。 旧值和新值都不为空但不同:修改单元格。 两边都为空或值相同:忽略。
第三步,生成报告。
Summary 负责告诉你“总共变了多少”;Diff 负责告诉你“具体哪里变了”。这比直接打开两个 Excel 来回切换更稳定,也更容易发给别人复核。
为什么没有做复杂匹配?
比如“根据 ID 对齐行”“识别插入行后整体偏移”“把相似文本归并为同一条记录”,这些都很有价值。
但我这次刻意没有塞进 MVP。
原因很简单:表格差异对比的场景很多,如果一开始就做复杂智能匹配,很容易在规则上变得含糊。对于 Day 19 这个版本,我更希望它先做到三点:
结果可解释。 行为可预测。 命令能马上跑通。
所以它现在更适合“模板结构相对稳定”的表格,例如报价单、台账、清单、排期表。
现在的局限
这一版还有明显边界:
只支持 .xlsx,不支持.xls。按单元格坐标对比,不会自动识别插入行导致的整体偏移。 不比较单元格样式、批注、图片、筛选器和图表。 公式默认按公式文本比较,除非加上 --data-only。不处理合并单元格的语义差异。
但对于最常见的“这个表到底改了哪里”,它已经够用了。
后续可以怎么升级?
后面可以继续加:
指定主键列,根据 ID 对齐行。 输出一份带原表结构的高亮副本。 支持只对比指定工作表。 增加忽略列、忽略大小写、忽略空格等规则。 统计每个工作表的差异数量。 生成适合邮件或飞书消息的变更摘要。
源码
Day 19 项目源码已经放在 GitHub:
GitHub - Day 19 excel-diff
这类小工具最有用的地方,不是让 Excel 变得高级,而是让人少做一点低价值的反复确认。表格可以慢慢改,但差异最好一眼看见。
夜雨聆风