|
解决问题点
# p& y- H; L+ j& a0 {4 j! t拿到一个产品的BOM,有许多位号对应的原材料品番。
, Q1 e. {, u( ~3 z4 G* F |
3 J4 b! s2 V: W$ w( t买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
, {( c- {- T( |" N7 Q6 _
+ h0 L0 r' s* W3 \, ^+ q处理之前
: b5 C3 B2 c$ X1 F: Q- Z5 t[table][tr][td=1,1,109]品番[/td][td=1,1,72]使用数量[/td][td=1,1,274]位号[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C357,370,374-376,383-385,387-389[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C14,15,131,221-223,235-237,241,242[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C12,13,88,90,92,96,100,103,104[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C111,112,115,117,119,121,122,130[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C132,218-220,230-234,245,246[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C257-280,290-304,307-310,317-321
8 W; q3 t3 v, E5 u2 P, |
0 N3 }# ?+ Z. J( A. g6 R处理之后$ Q4 O }- G7 G" {# w. m" }
[table][tr][td=1,1,72]品番[/td][td=1,1,72]使用数量[/td][td=1,1,72]位号[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C357[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C370[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C374[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C375[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C376[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C383[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C384[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C385[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C387[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C388[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C389[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C14[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C15[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C131[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C221[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C222[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C223[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C235[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C236[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C237[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C241[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C242[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C12[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C13[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C88[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C90[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C92[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C96[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C100[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C103[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C104[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C111[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C112[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C115[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C117[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C119[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C121[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C122[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C130[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C132[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C218[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C219[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C220[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C230[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C231[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C232[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C233[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C234[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C245[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C246[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C257[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C258[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C259[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C260[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C261[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C262[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C263[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C264[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C265[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C266[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C267[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C268[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C269[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C270[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C271[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C272[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C273[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C274[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C275[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C276[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C277[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C278[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C279[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C280[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C290[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C291[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C292[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C293[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C294[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C295[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C296[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C297[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C298[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C299[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C300[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C301[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C302[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C303[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C304[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C307[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C308[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C309[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C310[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C317[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C318[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C319[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C320[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C321
8 v+ f: Z6 [! `4 }9 b# d- }2 E如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。
) w9 |1 j! R7 k, b. Z测试运行环境:/ [/ q. `( v1 v$ U& I
python版本 :python 3.78 S! K) B; g' J
IDE:Pycharm2022.1.1
g- i7 t8 d9 Y9 I模块使用:os,re,openpyxl,tkinter, I$ x- G; G( L+ J5 W7 c
, h5 {7 Y m2 T- q3 a) i源码:初次发表,源码如下:
9 R2 F: W0 F( \2 {# -*- coding:utf-8 -*-$ J4 U3 E1 Z6 i- y& E9 a- F
"""
" y1 w# J/ I5 E) C6 I6 _( f* Q- \# @File : excel数据拆分.py G+ A" D; v/ m6 _
# @Author:chen
) D" R d) M! Q9 k6 t5 V# @Date : 2024/1/5 C1 c. C R0 z: B: K- p) L
# @Desc :4 ]4 a3 t1 g9 k7 K
"""5 y* _8 [! G, W4 \
import re
9 o7 @0 M! v* z1 {$ Jimport os- G. g+ P3 U4 t: ]8 r- G! o3 g
from tkinter import filedialog6 L" [! O- E" ?" k9 X3 ~2 ?
from openpyxl import load_workbook/ U* Z: C/ l# E3 x( y
0 c8 f& F* Y3 K
# 定义文件夹路径
2 u, P& u9 m; P& l# folder_path = os.path.dirname(os.path.abspath(__file__)), T0 ~7 _5 q) ]! c; z: D, q
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
* K% e( S( |2 I" V1 E% j- |* d6 V) L8 g, O3 o- _: a6 V" n: C6 |6 g6 ]
# 列出文件夹中的所有文件和文件夹& H* h5 d6 o. B! Q+ M- c
files = os.listdir(data_dir); V2 l" U( N0 N- s/ @4 i+ F
' w, @3 C I, a& z F1 {+ j6 Q+ ~/ R7 x
# 遍历文件列表,筛选出文件名
5 D0 ]' o! o9 @+ [$ @$ i/ ofile_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
2 a% N* `+ Z6 S- U5 Q& |/ D1 Yprint("需要处理的文件名:", file_names)+ _7 Z7 V( R( L1 X; ?
0 E! n$ g8 m5 l( f7 V, y# T- ]8 y
def parse(data):
! w9 s6 F2 M! A3 n2 y P list1 = []
" p6 C0 n; m5 {$ e if ',' in data[2]:
0 h1 v' R j, l3 i6 L3 F list2 = data[2].split(',')( Z, C! N1 y! s/ S% R9 r
# print(list2)
7 A3 V2 ^2 p- Y, Q # print("*"*90)9 m, ] x1 D$ o# q% V: V) l
list1 = [i for i in list2 if i is not '']& y3 Z9 M; H! }! z8 c1 _
# print(list1)0 Y4 U/ n5 l4 N& {8 w% E
elif ' ' in data[2]:4 F7 c6 K( M2 s4 { S. r5 M2 r2 ^
list2 = data[2].split(' ')$ a4 r e. s% `9 p& D* z' x
# print(list2)# F+ n; C: O7 s$ e$ Q0 a
# print("*"*90)
% z! ]# ^; S" ] list1 = [i for i in list2 if i is not '']
- i* W$ A0 w1 D- q J else:9 ?' s2 k2 G; a; G8 M' K4 H
list1 = [data[2]]8 q2 A {: a, M' m3 m9 \
# print(list1)
* S) R$ k6 W" v: O9 H9 `1 ^
2 |+ s& P% t9 [9 y& I9 ~* A% u # 针对第一个字母的多个回路改进 C300-335,350-405,407,268-275,520
; L$ @5 ]2 t+ @! m3 e# p* U7 I$ R # 问题点 回路没有字母的需要判断一下
- w7 g7 @. [- B; _! x new_list = []
& j8 Z! a- C; t first_id = list1[0]
$ F) K* X$ A; |! z, c% v" Y if first_id.isdigit(): # 判断回路是不是纯数字组成
9 y: @, S. X" c% K first_id_str = ''
. N3 o, u8 G0 ~. j ? else:% m, M5 B0 F6 n$ e W7 H8 m/ x
first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]7 s, Q- K8 ~$ R, z2 G
" M# N2 c+ y/ z0 ], \& y: k+ q # 添加代替品3 P" X8 m5 W& ?% w8 x
pa = ''" x, w5 b/ I$ l, a7 M
if len(data) >= 4:
4 n* j1 l8 w. E7 h3 u* k pa = data[3]
6 |; b4 G" a6 L6 c( p: i3 E M& [1 Z' Y; m6 Y1 {
for i in list1:
) k) h1 B. V0 [, ~2 N7 O) y9 K' k if '-' in i:
; C6 R+ ^9 |- Y! P- H4 q. s print("带-或空格的回路开始分解")7 A8 E" t; `* d- H$ I* Z0 a1 q: R/ I
item = i.split('-')% [3 |: ~& R' D9 ~
item_start = item[0]
0 U8 r' S" G4 U5 a) W4 A item_end = item[-1]
" N/ m1 M5 f. b2 U% w item_str = re.findall(r'[a-zA-Z]+', item_start)
x+ f; c: S# m' x" I* w2 H' @ if item_str:7 x% C) h2 G; H1 K" i
item_str = item_str[0], M6 [8 B- r; J* V$ n: @7 r+ E4 k. J
else:
5 z& h( k2 J( X+ q: x item_str = first_id_str
b: n6 T' l" O' J" a8 a" d3 S data_num = re.findall(r"\d+", item_start)
9 ]' d" c$ y. A* D8 V) j item_start_num = int(data_num[0])
5 g3 i: V" R( W" R item_end_num = int(re.findall(r"\d+", item_end)[0])
$ U# z5 O3 ~3 \
. Q$ ?. p$ X$ s u( S for a in range(item_start_num, item_end_num + 1):6 r1 |* O* b8 u5 e0 W; _+ m; X
c = item_str + str(a): L* O/ D& [9 {/ O/ I9 X( Q& t
9 C7 u5 d0 C6 F6 F
new_list.append([data[0], data[1], c, pa])
" G& E, l" d4 A6 ] # print(item_str,item_start_num,item_end_num)
4 P0 `, \" p) o% K0 M9 F0 K else:
0 q2 l. l3 y! M/ H3 @# [- q, \ if i.isdigit():
1 `4 ?7 |- t. ]: w' w# N c = first_id_str + i ]; t H+ j, [* L
new_list.append([data[0], data[1], c, pa])0 }" ^% A e- i/ A k9 W5 u
else:$ S: i1 n* P, d8 X! [0 e9 P y
new_list.append([data[0], data[1], i, pa])! Q( Z' X, |4 h) R/ w3 E! t
print(new_list)0 ^: z5 D7 Y' m/ P1 O* a1 C
return new_list7 [. i' }9 A& I2 P' `
0 f0 l' `3 Z1 ^4 ^" j9 u2 i
1 E1 d N' o; }def parse_data():+ U( d; l$ a, d% ?2 B3 |
for name in file_names:3 P2 {; i4 ^ D0 }( _( T0 D; ~
print(name)" p5 p$ Q' h1 Q6 Y3 c
if '.xls' in name:% Q$ \. Q2 \1 K9 Y- d8 m
wb = load_workbook(data_dir + name)
& m4 |, @4 {% U/ a6 F9 v # print(data_dir+name)
4 V o. A* h7 Y$ W sheet = wb.active! y. c8 V0 M+ [0 t$ ^
sheet_data = []
- Q/ {* Y! v: M6 m for rows in sheet:: R# b* W. m; K. B
row_list = []
- y" g, i/ v9 a- G' Q% K for cell in rows:$ q0 A( m0 q6 u$ V
row_list.append(cell.value)% u; p* j; n# L4 n9 k6 j/ N# S
sheet_data.append(row_list)+ Y* U; b: d6 C5 S
# print(sheet_data). a2 C: f7 G" i, B% K" Y5 K
! T* |7 M2 O( Y% @
new_sheet_data = []
4 ~ h" _4 m& d% m0 t for items in sheet_data:$ n- c5 y6 H, m ^
if items[2] == None:
9 m( S8 T* `) A3 d continue
7 q O4 r' | h! T6 { data = items[2]
7 n" |0 P( {" a" f if ',' in data or '-' in data or " " in data:# c' N3 W; v( e& s, v$ c. z! r
new_list = parse(items)) L7 f+ a: k7 C1 S U
for parse_list in new_list:% { N0 h+ V; m2 u# b$ U! F( k
new_sheet_data.append(parse_list)4 q: g8 g0 ~! u3 `% M9 m
# print(new_list)
2 J! d( z) D1 w! X9 S- P9 q3 R& f% Z1 G3 K9 ]- p' F4 B- l
else:# B( r8 B; j$ O& P
new_sheet_data.append(items)2 r _7 V# H3 I9 e9 r, B9 m# o
# print(new_sheet_data)
* K- b6 G$ g5 M# v2 G0 i$ {+ g* R sheet2 = wb.create_sheet("new_sheet")' l! i& ^1 W( W0 i B. d* l
print("创建新的sheet完成,sheet名:new_sheet")
1 k2 a4 p) |3 t( t+ ` for d in new_sheet_data:( z( n- l+ q( @9 f% l
if isinstance(d, list):
* p6 v/ a) _+ m" ]' z- @ sheet2.append(d)
$ a1 R! z- C. w6 [" b e else:
# [" @$ _& g: ]5 u' P' [8 V& |# I print(d, "格式不对-->", type(d))
1 J3 j9 P& V4 m* x/ S6 i- h6 D/ A8 X$ n wb.save(data_dir + name)
1 d @& l8 g- Q5 @( C3 p wb.close()# V; O1 }8 [2 |% z! ]& U9 R i
print("分解完成")( o' k; I7 J9 V" N6 o
: I# v# V6 X" V5 ?& J
! u! `: m( A1 F9 i8 s5 H$ ^if __name__ == '__main__':
4 r9 I5 D9 z" Q4 J parse_data()1 D0 M2 r* L; C% o+ @& z' Q
9 }8 T5 z8 B3 a/ i; ?' W! w$ c! r% G4 k! d- v c; e
# v. g: H& C: _0 p
# ^. n3 D9 q0 n' ~
侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关- `+ a5 k9 h5 T+ V
2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
3 }& C9 }" X" K* {# ]2 R5 K0 S3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责$ H8 ?9 I+ {' c/ q+ E8 U" S: T4 D
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
( }' M' i. G4 r如有侵权联系邮箱:ruikelink@gmai.com
$ V9 v" \7 i0 ~2 q: J; Q6 x4 M资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见
2 |+ f, J: {" T0 y1 S0 k3 s# X$ O+ A! \1 y& L
. T$ r" I: z/ k& I
% `$ J! D: s; N4 R; x! M4 P本资源由Java自学网收集整理【www.javazx.com】 |
|