Excel 比对工具
多版本 Excel 数据比对引擎
Excel 比对工具 · 使用说明书
本工具用于 快速比对两个 Excel 表格,自动识别对比表相对于基础表的行新增、行删除,以及单元格值变动。
所有比对结果将生成两份报告:一份 Excel 格式的详细差异清单,一份纯文本格式的差异摘要,满足明细查看与快速概览的不同需求。
💡本工具基于实际使用场景与测试结果反馈,迭代了三个版本:
-
V1 基础比对版:落地 Excel 自动化比对能力,适应通用的全表比对场景。
-
V2 多维截取版:解决 V1 仅支持标准全表比对的局限性,适配结构复杂的 Excel 文件,同时降低格式类因素导致的误报。
-
V3 体验增强版:在 V2 的功能框架基础上,优化运行稳定性与使用体验,解决大文件比对卡顿、参数重复录入等痛点。
👍建议:推荐使用 V1 和 V3,更稳定 ~
✔️使用场景:常用于对比不同历史版本的 EXCEL 文件。
Excel 比对工具 V1
操作步骤
第 1 步:打开工具

双击 diff2excel_gui.exe,窗口出现后,会看到 3 个输入框和 1 个“开始比对”按钮。

第 2 步:选择两个 Excel 文件
-
点击 “基础表路径” 右侧的“选择文件”按钮,选取作为基准的文件(如, 旧版本报表)
-
点击 “对比表路径” 右侧的“选择文件”按钮,选取待比对的新文件(如, 新版本报表)
两个文件可以是
.xlsx或.xls格式,但建议使用同一软件生成,避免兼容性问题。
第 3 步:输入“复合主键”
在“复合主键”输入框中,填写 能唯一标识每一行数据 的列名。
-
如果一列就能区分每一行(如“工号”),输入格式为:
["工号"] -
如果需要多列组合才能区分(如“部门”+“姓名”),输入格式为:
["部门", "姓名"]
重要:必须严格使用英文双引号和方括号,中间用英文逗号分隔。 示例正确:
["员工编号", "日期"]
🚩关于 主键 和 粒度 的概念说明,可见《粒度+主键》
第 4 步:开始比对
点击 “开始比对” 按钮,工具会先自动检查:
-
两个文件是否存在
-
主键输入格式是否正确
-
主键列是否在两个文件里都存在
-
主键组合是否是每行的唯一标识
全部检查通过后,正式执行比对。
进度和结果会实时显示在下方“运行日志”区域。
输出结果
🚩「Excel 对比工具 V1」的 文件目录结构

差异报告:在 ./reports/ 文件夹里

1. Excel 差异报告:diff_excel_时间戳.xlsx
包含 4 个工作表(Sheet):
-
单元格变动 Sheet:并排展示基础表和对比表的差异行,列层级为 (1基础表, 2对比表),只包含发生变化的字段
-
新增样本 Sheet:对比表独有的行记录
-
剔除样本 Sheet:基础表独有的行记录
-
架构差异 Sheet:新增字段和缺失字段清单
若无差异,仅写入提示文本

2. TEXT 差异报告:analysis_report_时间戳.txt
用纯文本汇总了比对关键信息,包括:
-
两个文件的基本信息(行数、字段数)
-
主键唯一记录数
-
字段变动统计
-
新增/删除行的具体主键值
-
发生值变动的行主键列表
-
以及工具运行中产生的任何警告(例如合并单元格处理)该文件可以直接用记事本打开,适合快速浏览整体情况。

注意事项
- 主键必须唯一
主键组合必须是每行的唯一标识。即,在基础表和对比表中,指定的主键组合不能有重复行。
例如,用“工号”做主键,但表中出现了两个“001”的员工,工具会报错。
- 字段行(首行)不能有合并单元格
如果Excel输入表的第一行(表头)存在合并单元格,工具会直接报错并停止。原因是表头合并会破坏列名与数据的对应关系,无法准确读取。请将表头拆分为单一单元格后再运行。
- 数据行的合并单元格需要注意
如果数据区存在合并单元格,运行日志会提醒,但不会停止运行。合并单元格的值全部取自左上角单元格的数值(这样后续比对基于实际可见值而非空值)。
- 字段不能重复
如果Excel输入表的字段(表头)存在重复值,工具会直接报错并停止。原因是字段重复无法识别对应内容。
- 空值处理
空单元格在比对时会被视为一个特殊值<<NULL>>,因此空单元格与空单元格相等,空单元格与文本“null”不相等(视为差异)。
- 数值精度
对于小数,工具允许极小的浮点误差(约1e-5的相对误差),不会将1.00001和1.00002误判为差异,避免科学计算中的精度噪声。
- 文件格式
本工具只读取单元格的值,不关心字体、颜色、边框等格式;也不关心公式,只关心公式对应的实际值。
- 筛选状态无影响
即使Excel文件保存时带有筛选状态,工具仍会读取全部数据,不受影响。
Excel 比对工具 V2
💡What's New (新版特性):
与旧版本相比,本次更新增强了数据截取的灵活性,且发生了输出报告的小变化:
-
多维数据截取:支持指定基础表和对比表的 Sheet 名、表头所在行号、有效起始列。
-
合并单元格处理:遵循“先剔除后校验”逻辑,系统仅拦截和处理有效数据区域内的合并单元格。
-
非数值列去空格:在进行字符串比对前,针对非数值类型新增了去除前后不可见空格的处理,降低格式导致的误报率。
-
差异报告变化:
-
差异报告(EXCEL/TEXT版),强制追踪并显示数据的“原表物理行号”,方便溯源定位。
-
差异报告(EXCEL版)中,取消了主键列数据区域的合并单元格。
-

Excel 比对工具 V3
💡What's New (新版特性):
基于 V2「多维数据截取版」,在原有能力的基础上,新增以下改善:
-
数据预处理增强:自动过滤无效行
-
主键校验升级:空格检测仅提醒不中断
-
底层稳定性修复
-
交互体验优化
-
比对逻辑放入后台子线程,运行过程中界面全程可操作、不卡顿。
-
参数自动记忆,每次运行后保存配置,下次启动自动填充。
-
新增「打开结果文件夹」按钮,快速到达输出目录(
reports/文件夹)。
-

参数记忆
💡关于「参数记忆功能」
文件 diff_config.json(自动保存工具所在目录下):自动保存参数,用于下次运行的默认值
⚠️删除
diff_config.json,不影响运行,只是会忘记上次运行的参数。如果重新运行diff2excel_gui.exe,又会自动生成diff_config.json,记录运行参数。
文件目录结构
🚩「Excel 对比工具 V3」的 文件目录结构

Q:如何对比 BOM?
【对比前提】
对比 同一物料 的 两个版本 BOM,否则对比无意义。
【核心思路】
先确定每行 BOM 明细的唯一标识(复合主键),再基于主键完成行级差异比对。
情况 1:SAP 的 BOM
SAP 的 BOM:每一行代表每个父料下每个子料的明细。
粒度(一行的唯一标识):父项物料编码 + 子项物料编码。

对比方法:(主要两类)
-
diff2excel_gui.exe自动化工具:直接用自动化工具对比,复合主键填写["父项物料编码", "子项物料编码"]。 -
EXCEL 公式:方法好多好多。只需要看 "父+子" 组合在两表的归属关系:
-
仅基础表存在 → 该条子项已删除
-
仅对比表存在 → 该条子项为新增
-
两表均存在 → 共有行,可进一步比对其余字段的数值变化
情况 2:PLM 的 BOM
PLM 的 BOM:仅有"结构级别"和"物料号"字段,无显式父料号字段,粒度声明不清。

处理思路:如果要对比,就要找出每行物料对应的父料号,每行形成 "父+子" 的组合。
找父料的方法:特别简单,EXCEL 自带的 xlookup 函数就能解决。

公式解释:
A$2:A5:从 A 列当前行之上查找匹配值。A5-1:查找 A 列当前行之上,层级比它小的层级数字。B$2:B5:从 B 列当前行之上查找目标值。-1:表示"从下往上"搜索。它会找到最后一个(即最近的)小于当前层级的行,并返回对应的料号。"NULL":如果没找到,则返回 "NULL"。如果当前层级是 1(顶层),找不到比它小的值就返回"NULL"。0:精确匹配。
🤔找父料的方法很多,灵活变通~
💡找出父料号后,以 "父+子" 作为每行的唯一标识。后续对比方式,可参考**【情况 1:SAP 的BOM】**,逻辑完全一致。
