返回项目列表
云鲸智能云鲸智能2026-07 至 2026-09

Excel 比对工具

多版本 Excel 数据比对引擎

角色:独立开发负责人PythonExcel
复合主键行级比对明细 + 摘要双格式报告3 个版本迭代优化

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「多维数据截取版」,在原有能力的基础上,新增以下改善:

  1. 数据预处理增强:自动过滤无效行

  2. 主键校验升级:空格检测仅提醒不中断

  3. 底层稳定性修复

  4. 交互体验优化

    • 比对逻辑放入后台子线程,运行过程中界面全程可操作、不卡顿。

    • 参数自动记忆,每次运行后保存配置,下次启动自动填充。

    • 新增「打开结果文件夹」按钮,快速到达输出目录(reports/文件夹)。

参数记忆

💡关于「参数记忆功能

文件 diff_config.json(自动保存工具所在目录下):自动保存参数,用于下次运行的默认值

⚠️删除diff_config.json,不影响运行,只是会忘记上次运行的参数。如果重新运行diff2excel_gui.exe,又会自动生成diff_config.json,记录运行参数。


文件目录结构

🚩「Excel 对比工具 V3」的 文件目录结构

Q:如何对比 BOM?

【对比前提】

 对比 同一物料 的 两个版本 BOM,否则对比无意义。

【核心思路】

先确定每行 BOM 明细的唯一标识(复合主键),再基于主键完成行级差异比对。

情况 1:SAP 的 BOM

SAP 的 BOM:每一行代表每个父料下每个子料的明细。

粒度(一行的唯一标识):父项物料编码 + 子项物料编码。

image.png

对比方法:(主要两类)

  1. diff2excel_gui.exe自动化工具:直接用自动化工具对比,复合主键填写 ["父项物料编码", "子项物料编码"]

  2. 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】**,逻辑完全一致。