Python: 3.8 或更高版本
依赖库:
标准库:无额外安装
可选: openpyxl(用于读取数值类型的数量数据)
bash
pip install openpyxl
平台: Linux / macOS / Windows
内存: 建议 512MB 以上
bash
python sop_bom_report.py bom.xlsx --sop sop.xlsx
bash
# 多个 BOM 文件会合并后一起与 SOP 对比
python sop_bom_report.py bom1.xlsx bom2.xlsx bom3.xlsx --sop sop.xlsx
bash
python sop_bom_report.py bom.xlsx --sop sop.xlsx -d ./reports
bash
python sop_bom_report.py bom.xlsx --sop sop.xlsx -v
每次生成报告后自动执行:
临时目录:清理系统临时目录下的 sop_extract_*、 bom_extract_*、 report_*
旧报告:
如需手动清理,可执行:
bash
# Linux/Mac
rm -rf /tmp/sop_extract_* /tmp/bom_extract_* /tmp/report_*
# Windows (PowerShell)
Remove-Item -Path "$env:TEMP\sop_extract_*" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:TEMP\bom_extract_*" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:TEMP\report_*" -Force -ErrorAction SilentlyContinue
页码序号物料编码名称规格位号数量项次物料编码名称规格位号数量SOP数据BOM数据
颜色标注:
SOP 中有但 BOM 中没有的物料,显示完整 SOP 数据(页码、序号、物料编码、名称规格、位号、数量)。
BOM 中有但 SOP 中没有的物料,显示完整 BOM 数据(项次、物料编码、名称、规格、位号、数量)。
三级提取策略:
当 SOP 文件符合标准格式时,使用以下列提取:
列字段说明BF页码格式:"第X页,共Y页"AN序号范围 1-20AQ物料编码格式:XXXXX-XXX-XXXAX名称规格名称和规格合在一起BI位号物料位置信息BO数量物料数量(优先使用 openpyxl 读取数值)
当标准格式提取不到物料时,自动启用多列兼容模式:
列字段说明AQ/AR/AX/AN/BU/BF物料编码自动扫描多列查找(按优先级)AX/AQ/AR/AN/BU/BF名称规格自动检测(排除物料编码本身)BI/BJ/BK位号自动检测BO/BP/BN/BQ数量自动检测(优先使用 openpyxl 读取数值)
特殊格式支持:
data_only=True 模式读取实际显示的数值当以上格式都无法提取时,直接从 Excel 共享字符串中提取物料编码:
^\d{5}-\d{3}-\d{3}$自动识别两种 BOM 格式:
列字段说明F项次物料序号G物料编码格式:XXXXX-XXX-XXXH名称物料名称I规格规格型号K用量分子用于计算数量L用量分母用于计算数量M备注包含位号信息
列字段说明H项次物料序号I物料编码格式:XXXXX-XXX-XXXJ名称物料名称K规格规格型号N用量分子用于计算数量O用量分母用于计算数量P备注包含位号信息
智能检测:脚本会自动检测 BOM 文件使用哪种格式,优先检测新格式(G列物料编码)。
数量计算:实际用量 = 分子 ÷ 分母,分母为空或0时默认为1
对比时自动忽略:
{订单编号}_校对报告.xlsx15214-100-008 VV12548主板PCBA作业指导书-V04.xlsx,输出文件名为 15214-100-008_校对报告.xlsx用户发送 BOM 和 SOP 文件要求对比校对时触发。
Python 版本错误 text
错误: 需要 Python 3.8 或更高版本
解决:升级 Python 到 3.8+
临时目录权限错误 text
PermissionError: [Errno 13] Permission denied
解决:检查临时目录权限,或设置 TEMP 环境变量
文件编码错误 text
UnicodeDecodeError
解决:确保文件为 UTF-8 编码
运行时添加 -v 参数查看详细日志:
bash
python sop_bom_report.py bom.xlsx --sop sop.xlsx -v