python excel操作 bom_Python Pandas比较BOM表数据

前言背景

年前运用Python写的小应用,借此刻写本文的机会,再次整理总结。

我们公司电子工程师会使用Mentor工具导出一张BOM表,然后相关专员会将其手动输入到SAP系统里 ( 为何不能一键导入?)。但由于数据庞杂,专员担心手动输入可能有误,于是又将SAP里数据导出,让工程师去比对确认材料、位号和数量有无错误。

有一次看到某同事一直忙于在整理Excel、比较数据,于是我就想能否用Pandas和PyQT5去写个小工具自动比较并导出结果?

工具界面十分简单,只要选择SAP数据表和Mentor数据表后,点击保存至Excel即可。有差异的地方按照自己想要的样式呈现在Excel,如此节省工程师整理比较数据时间。

SAP表里可能会有个某个大类产品下多个型号的设备BOM数据,而Mentor 表是单一型号设备数据。SAP 表每一行都是某个位号的材料信息,而Mentor 表里每行是某个Part No信息,2张表样式(部分)如下:

SAP和Mentor数据表(部分内容)

从上图中可看出SAP和Mentor数据表里都有很多列,但我们需要比较的分别是SAP 的Material,Componet(同Mentor里的PART NO) 和Installation point(同Mentor里的REF DES),和Mentor里的PART NO,REF DES以及COUNT。

SAP Material列筛选后有4个不同的数据,50149261-003,50149261-013,50149261-023,50149261-033,它们是用于区分同类产品下的4个不同module的设备。Mentor表文件名称包含这些字段,如文件名50149261-033(SCBIP-24V)。

工具界面

小工具界面

SAP数据

我们Upload SAP BOM表时需要对Excel进行简单判断,要求其必须含有Installation point列(Mentor不含此列)。选择Mentor数据表时,要求Excel文件名称含关键字段,否则给予错误提示。

def loadSAPData(self):

file_Path, _ = QFileDialog.getOpenFileName(self, 'Open file', "C:\\", 'Excel files(*.xlsx , *.xls)')

# 如果用户不选择文件,直接取消选择,

if file_Path =='':

return

df = pd.read_excel(file_Path) #根据路径读取excel文件

columns = df.columns.values.tolist() # 获取表所有的列名

if 'Installation point' in columns: # 判断关键字在列名称列表里

self.label_sap_file.setText(file_Path.split('/')[-1]) #文件名显示在界面上

self.sap_df = df

self.materials = df['Material'].unique() #列表,存放不同型号

self.label_sap.setStyleSheet("QLabel{border-image: url(:icons/excel.png);}") #label设置图片

else:

self.showMessage() #选择的文件不含有Installation point列,则提示错误信息

def showMessage(self):

self.materials = [] #清空列表里的material

messageBox = QMessageBox()

messageBox.setWindowIcon(QIcon(':icons/error.png')) #注意为了打包后APP上能够显示图片,此处使用冒号,icons 是项目里的一个自己创建的文件夹

messageBox.setWindowTitle('Error Message')

messageBox.setText(

"This file doesn't include a column named 'Installation point'.\nWould

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值