自动化办公--通过BOM表输出原材料状态(第一版)
提示:通過文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、現(xiàn)有的數(shù)據(jù)有哪些?
- 二、使用步驟
- 1.引入庫
- 2.讀入數(shù)據(jù)
- 總結(jié)
前言
通過已有的產(chǎn)品BOM狀態(tài),運(yùn)用python自動(dòng)整理匯總輸出零部件狀態(tài)至Excel中。
運(yùn)算邏輯:先通過母件編碼狀態(tài)——確認(rèn)出料體狀態(tài)——再通過料體狀態(tài)確認(rèn)出原料狀態(tài)。
? ? ? ?確認(rèn)料體狀態(tài)時(shí),會(huì)存在著同一種同時(shí)存在4種狀態(tài),原因是一種料體會(huì)組裝成不同的產(chǎn)品銷售。當(dāng)一種料體存在著1~4種時(shí),需要按照優(yōu)先順序選取,分別為正常銷售>消耗升級(jí)>消耗淘汰>已下架。同理,原材料也會(huì)存在相同的問題,篩選方法一樣。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、現(xiàn)有的數(shù)據(jù)有哪些?
1,BOM表,格式如下:
其中子件編碼分為三個(gè)等級(jí),分別為半成品,料體,原材料,而我們要輸出的時(shí)最后一級(jí),原材料的狀態(tài)
| 母件編碼 | 母件名稱 | 母件規(guī)格 | 子件編碼 | 子件名稱 | 子件規(guī)格 | 子件計(jì)量單位 | 使用數(shù)量 | 母件存貨分類 | 子件存貨分類 |
2,產(chǎn)品狀態(tài)表
二、使用步驟
1.引入庫
代碼如下(示例):
import pandas as pd from pandas import DataFrame from openpyxl import load_workbook,Workbook #篩選母件編碼為1開頭的BOM明細(xì) wb=load_workbook('BOM表test.xlsx') ws=wb.active # 新建工作簿 new_wb = Workbook() # 獲取新工作簿中的工作表 new_ws = new_wb.active # 獲取表頭 late_header = [] for cell in ws[1]:late_header.append(cell.value) # 將表頭寫入新工作簿的工作表中 new_ws.append(late_header) for row in ws.iter_rows(min_row=2, values_only=True):name = row[0] #指定欄存貨編碼if name.startswith('1'): #篩選存貨編碼1開頭的成品明細(xì)new_ws.append(row)#print(row)#篩選存貨編碼3開頭的料體明細(xì) new_ws1=new_wb.create_sheet('配方明細(xì)') # 獲取表頭 late_header = [] for cell in ws[1]:late_header.append(cell.value) # 將表頭寫入新工作簿的工作表中 new_ws1.append(late_header)for row in ws.iter_rows(min_row=2, values_only=True):name = row[0] #指定欄存貨編碼if name.startswith('3'): #篩選存貨編碼3開頭的明細(xì),如果用母件分類為料體篩選會(huì)遺漏new_ws1.append(row)new_wb.save('管理狀態(tài)表test.xlsx')#導(dǎo)入數(shù)據(jù) data1=pd.read_excel('成品狀態(tài)表1022.xlsx') df1=DataFrame(data1) #創(chuàng)建DataFrame對(duì)象數(shù)據(jù)data=pd.read_excel('管理狀態(tài)表test.xlsx') df=DataFrame(data) #創(chuàng)建DataFrame對(duì)象數(shù)據(jù) df1=df1.loc[:, ['存貨編碼', '版本狀態(tài)']] #切片,只取存貨編碼,版本狀態(tài)兩列 df=pd.merge(df,df1,on='存貨編碼',how='left') #目的:左連接匹配版本狀態(tài)至BOM表#篩選-確認(rèn)料體狀態(tài)(優(yōu)先級(jí):正常銷售>消耗升級(jí)>消耗淘汰>已下架) data2=((df[df['子件存貨分類']=='料體'][['子件編碼', '子件存貨分類','版本狀態(tài)']]).drop_duplicates()).sort_values(axis=0,by='版本狀態(tài)',ascending=True) #查看條件為料體的子件編碼和存貨分類,并去重 data3=data2.rename(columns={'子件編碼':'存貨編碼'}).reset_index() #修改列名,重置索引 data3['版本狀態(tài)']=data3['版本狀態(tài)'].fillna('無狀態(tài)') #填充空值# 遍歷選出當(dāng)存在多個(gè)同樣的編碼時(shí),標(biāo)記第一個(gè)出現(xiàn)的為“選擇”,其余標(biāo)記為“不選擇” data3['遍歷']=None for i in range(0,len(data3['存貨編碼'])):if data3.iat[i,1] != data3.iat[i-1,1]: #當(dāng)當(dāng)前欄不等于上一行編碼時(shí)data3.iat[i,4] ='選擇'#print('選擇')else:data3.iat[i,4] ='不選擇'#print('不選擇')#篩選最終需要的料體狀態(tài)明細(xì) data3_final=data3[data3['遍歷']=='選擇'][['存貨編碼', '版本狀態(tài)']]#將配方狀態(tài)匹配到“配方明細(xì)”表 data5=pd.read_excel('管理狀態(tài)表test.xlsx',sheet_name='配方明細(xì)') df2=DataFrame(data5) #創(chuàng)建DataFrame對(duì)象數(shù)據(jù) df2['存貨編碼']=df2['存貨編碼'].astype(str) df3=pd.merge(df2,data3_final,on='存貨編碼',how='left')#從配方明細(xì)表中篩選-確認(rèn)原料狀態(tài)(優(yōu)先級(jí):正常銷售>消耗升級(jí)>消耗淘汰>已下架) df4=((df3[df3['子件存貨分類']=='原料'][['子件編碼', '子件存貨分類','版本狀態(tài)']]).drop_duplicates()).sort_values(axis=0,by='子件編碼',ascending=True) #查看條件為原料的子件編碼和存貨分類,并去重 df4['版本狀態(tài)']=df4['版本狀態(tài)'].fillna('已下架') #填充空值#匯總原料通用項(xiàng)(只匯總正常銷售,消耗升級(jí)部分) df4['是否通用']=None #df3['匯總通用項(xiàng)']=df3.groupby('子件編碼')['版本狀態(tài)'].count() for k in range(0,len(df4['子件編碼'])):if df4.iat[k,2]=="1正常銷售"or df4.iat[k,2]=="2消耗升級(jí)":df4.iat[k,3]=1else:df4.iat[k,3]=0 df3_1=df4.groupby('子件編碼')['是否通用'].sum()# 遍歷選出當(dāng)存在多個(gè)同樣的編碼時(shí),標(biāo)記第一個(gè)出現(xiàn)的為“選擇”,其余標(biāo)記為“不選擇” df4['遍歷']=None for j in range(0,len(df4['子件編碼'])):if df4.iat[j,0] != df4.iat[j-1,0]:df4.iat[j,4] ='選擇'#print('選擇')else:df4.iat[j,4] ='不選擇'#print('不選擇')#篩選最終需要的料體狀態(tài)明細(xì) df3_2=df4[df4['遍歷']=='選擇'][['子件編碼', '版本狀態(tài)']] df3_final=pd.merge(df3_2,df3_1,on='子件編碼',how='left')#導(dǎo)出df至excel writer = pd.ExcelWriter('原料總管理表.xlsx') df.to_excel(writer,'BOM狀態(tài)') df3.to_excel(writer,'配方明細(xì)') data3_final.to_excel(writer,'料體狀態(tài)') #data3寫入表格 df3_final.to_excel(writer,'原料狀態(tài)') writer.save()最終輸出狀態(tài)為:
?
?
總結(jié)
本文目的純屬為了記錄方便以后優(yōu)化,第一次寫代碼仍有很多的bug。
需優(yōu)化數(shù)據(jù):1,與研發(fā)確認(rèn)料體狀態(tài);2,簡化代碼,提高運(yùn)行效率
總結(jié)
以上是生活随笔為你收集整理的自动化办公--通过BOM表输出原材料状态(第一版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 意创坊-移动富媒体平台
- 下一篇: RFC 文档(1001-1500)