从 BOM 工作簿的「分项明细表」一键生成「汇总表」。
一、双击就用(推荐)
dist\BOM汇总工具.exe ← 这个就是成品,免安装,双击打开。
界面从上到下一步步来:
| 步骤 | 操作 |
|---|---|
| 1 | BOM 源文件 → 点「浏览…」选你那个 xxxBOM.xls |
| 2 | 明细工作表 → 打开文件后自动选中「分项明细表」,一般不用改 |
| 3 | 合并依据 → 默认「名称+规格+单位+厂家+物料编码(推荐)」,一般不用改 |
| 4 | 输出文件 → 自动填好(源文件同目录 + _汇总表.xlsx),可点「另存为…」换地方 |
| 5 | 点 「一键生成汇总表」 → 完成后问你要不要直接打开 |
也可以先点「仅预览(不写文件)」,在「汇总表预览」页看结果、「生成报告」页看合并明细,确认无误再生成。
源文件一个字都不会动,结果永远写到新文件里。
二、生成规则(v1.0)
- 从表头行往下扫,把三个分区的明细行按原顺序接起来;
- 自动跳过:分区标题行(如「电源切换控制柜」「SAL1 配电室照明」)、小计行、总计行、重复出现的表头行、空行;
- 按「货物名称 + 规格型号 + 单位 + 厂家 + 物料编码」完全相同判定为同一种物料 → 合并成一行、数量相加,位置留在首次出现的位置;
- 重新编号 1..N,末尾补一行数量合计;
- 标题行 / 副标题(如「双电源系统清单」「08.01交货」)/ 表头 / 列宽 / 边框自动继承源文件里原有汇总表的样式。
本次的实测结果
源文件 602609012…BOM.xls:
明细项数 42 → 汇总行数 40 数量合计 210(与明细小计 180+19+11 完全一致)
合并 2 组:
· 微型断路器 CDB9H-63/2P C3A 第24行 3 + 第29行 1 → 4
· 配电箱壳体 500*600*250mm 第31行 1 + 第35行 1 → 2
⚠️ 和原文件里那份汇总表有 1 处差异,请核对
原文件里的汇总表是手工调过的:它把两处CDB9H-63/2P C3A合并成 4 之后,挪到了“微型断路器”那一堆的末尾(第 33、34 行)。
本工具按规则把合并结果留在首次出现的位置(第 20 行),因此行号会和手调稿整体错位。
内容与合计完全一致,只是顺序不同。若你确实需要"把微断集中到一起",告诉我,我加一条“按名称归堆”的选项。
三、命令行的用法(可选)
给批处理 / 定时任务用:
BOM汇总工具.exe "D:\你的项目目录\xx项目BOM.xls"
BOM汇总工具.exe "D:\你的项目目录\xx项目BOM.xls" -o "D:\输出目录\汇总.xlsx"
BOM汇总工具.exe "D:\你的项目目录\xx项目BOM.xls" -k "名称+规格+单位+厂家"
BOM汇总工具.exe "D:\你的项目目录\xx项目BOM.xls" --report r.txt
BOM汇总工具.exe --help --report h.txt
| 参数 | 说明 |
|---|---|
-s, --sheet <名> | 指定明细工作表名,默认自动识别 |
-o, --out <路径> | 输出 xlsx 路径 |
-k, --key <名> | 合并依据(见下) |
-t, --title <文字> | 汇总表标题 |
--no-preamble | 不继承源文件现有汇总表的抬头 |
--report <路径> | 把报告写到文件(没有控制台的窗口程序必须加这个才能看到输出) |
合并依据可选:
名称+规格+单位+厂家+物料编码(推荐)名称+规格+单位+厂家名称+规格型号仅物料编码(无编码时退回名称+规格)
四、支持的格式
| 读取 | 写出 | |
|---|---|---|
.xls(Excel 97-2003) | ✅ | 会转存为 .xlsx |
.xlsx / .xlsm | ✅ | ✅ |
.xlsb、.et 不支持,请先在 WPS/Excel 里另存为 .xlsx。
五、常见问题
Q:数量列里写了“若干”这类文字怎么办?
A:不会报错。这一条不会参与相加,原样保留文字,并在「生成报告」里用 ※含非数字数量,未相加 标出来。
Q:报表里“含税单价/含税总价”是空的。
A:因为明细表里这两列本来就是空的,工具原样保留该列。填好价格后重新生成即可保留。
Q:能不能直接改原文件的汇总表,不另存?
A:这一版按你的选择做了“另存新文件”(最安全)。需要回写的话说一声,加个开关就行。
Q:表头不在第 2 行 / 列的顺序不一样 / 列名变了?
A:工具是在前 30 行里自动找表头的(要求至少认出「货物名称」和「数量」),列的顺序随便排都行,别名(如「物料名称」「子件编码」「需用数量」)也认。
Q:结果的行数/数量和源文件里的汇总表对不上?
A:先看「生成报告」页——里面会逐条列出跳过了哪些行、合并了哪些物料,还有一行 [OK] 汇总表数量合计 == 明细表数量合计 的一致性校验。对不上基本就是明细表里有小计行没被识别,或名称列被合并单元格了。
六、文件清单
| 文件 | 说明 |
|---|---|
dist\BOM汇总工具.exe | 成品,双击即用,免安装 |
bom_summary.py | 源码(GUI + 命令行 + 核心算法) |
test_bom_summary.py | 自动化校验脚本(131 项断言) |
verify_gui.py | 界面布局无头验证 |
verify_package.py | 打包后验收(exe 与源码结果一致性等) |
make_icon.py | 图标生成(纯标准库手写 ICO) |
build.py | 打包脚本 |
示例输出\…_汇总表.xlsx | 用你这份 BOM 实际生成的样例结果 |
app.ico | 图标 |