|
解决问题点
7 g0 \( n% N3 E$ w拿到一个产品的BOM,有许多位号对应的原材料品番。5 |( o0 w3 V1 h/ ?) x" e; C
( I; Q" H* m6 N3 h' V# F
买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。/ V3 M, }( W; r
5 K: X. ], S+ s* F3 K* K
处理之前8 p, A1 O4 b9 M: C m* s% M: Q2 ^
[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
9 z9 Y1 S3 `0 K
2 D! ~9 D1 T. H, [: P; F' m' a处理之后) [; O; b7 S4 E+ X
[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]C3214 u) f& P, [1 u2 \+ l
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。1 \4 G- u7 L1 C
测试运行环境:" g0 \5 n0 ~0 H0 k2 V
python版本 :python 3.7
! O3 u# `/ L' K* BIDE:Pycharm2022.1.1' P3 K q5 G$ Y3 d9 J' T) v5 H( ]
模块使用:os,re,openpyxl,tkinter
. {2 E% O& n( {/ h: f+ Z
% ~8 a' \3 m% }' W! @源码:初次发表,源码如下:
% u8 w. g7 r: Z0 j# -*- coding:utf-8 -*-
9 B, K; Y9 v; I3 K1 K"""* p' I3 v, h8 a4 g7 O! d7 l
# @File : excel数据拆分.py
" T7 {, g& g& N" ^# @Author:chen
3 @+ x" C$ L' ^: B, ~# @Date : 2024/1/5
. o+ E3 C/ b" |# c8 N/ r# T# @Desc :5 V' f, ?& v7 h* U$ I0 t5 D; S1 h% S
"""1 B3 _4 ~& j9 g) ?( Y- c
import re
3 i" F6 }$ r7 v: Rimport os
# V" W' r6 H1 s3 Jfrom tkinter import filedialog
9 N( s5 C: [1 s% e4 U+ Jfrom openpyxl import load_workbook
9 S/ F/ [" G" ?% X, R
+ @; U1 o$ d) G0 r# 定义文件夹路径# Q3 N1 L1 @: S' S2 Y; V
# folder_path = os.path.dirname(os.path.abspath(__file__))
1 X$ k5 }5 Z7 u2 r: Udata_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
: S2 O: ?' D5 n3 W, X j# K" k& I; o' i9 V, c
# 列出文件夹中的所有文件和文件夹7 x$ b+ q: Y: G8 ?
files = os.listdir(data_dir)7 m* _' V9 ?& K3 R8 s- x, w8 ?% d. t
3 z( d! c. @+ N- q2 k4 _
# 遍历文件列表,筛选出文件名, E( V5 b5 I1 q! F. i! \
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
* B* c2 S3 ]6 P& [" ]( y$ I- m8 oprint("需要处理的文件名:", file_names)
* i% K% q: I8 l$ J# f: v- `! u& O5 V3 a) {& R
5 i# _) v9 G/ G# Zdef parse(data):
n5 R9 E- L4 x list1 = []
+ l" r. C* P3 r" h: x if ',' in data[2]:
! K1 g4 \( l0 r9 J1 h- X0 N list2 = data[2].split(',')( f! i4 B1 R; I2 y. ^7 j4 A
# print(list2)9 E9 }. V5 ]1 a4 n$ @
# print("*"*90)
9 w- A m7 i7 q; W list1 = [i for i in list2 if i is not '']
/ Q6 W1 f. {: ~5 q5 |. C # print(list1)
! A1 i* J. s9 L; ] F$ R5 g elif ' ' in data[2]:
4 C! A) M' S, ?) r2 D7 }4 c list2 = data[2].split(' ')3 j9 P0 f$ S1 ?" j5 R! f( W; S
# print(list2)
& ]3 D0 p4 I9 I& ~4 h C # print("*"*90)! ]; N# o( `9 y* u( V$ |/ E
list1 = [i for i in list2 if i is not '']) @/ H' F5 ~* a% R0 K, ]. U3 P
else:
! H8 v) @7 t3 M7 E% Y1 J4 d7 W list1 = [data[2]]
% g* ?! I8 M% c Y) h% ^ # print(list1)0 K( f, e2 d0 T6 Y0 G3 X
% a; b# o4 p/ o7 [
# 针对第一个字母的多个回路改进 C300-335,350-405,407,268-275,520
& |4 @ D# o1 W% t4 J% g9 [( r$ ^: m # 问题点 回路没有字母的需要判断一下
; h- I3 c, i$ F$ _ new_list = []; t8 J4 G0 q2 f6 C
first_id = list1[0]
$ k7 l4 v: _' y2 o8 {8 X if first_id.isdigit(): # 判断回路是不是纯数字组成) e3 A3 t4 v" f) ]
first_id_str = '') M1 ?% t: e$ x% p/ I' f
else:# D- x0 m2 f. `- z6 y5 J3 @, c
first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]
% x5 n+ b- M0 ^# q4 \' L
0 N4 t H8 b( o& q }% P # 添加代替品
$ g; ?) D3 O+ |' y" c pa = ''% e: c( y8 w4 \; ~, u) e v
if len(data) >= 4:9 g$ k1 q" r9 ^
pa = data[3]" N6 ^8 K" }7 U G9 A: A! Y
0 Q* o$ j { k2 q( ^7 E) T& b for i in list1:
4 Z1 p6 w% V6 Y1 A0 N$ \) k if '-' in i:3 X) c1 `5 a/ V( ?/ h
print("带-或空格的回路开始分解")9 b2 O* }% b2 [" Z6 a! O9 U1 L
item = i.split('-')
' w6 \3 N- b' J9 F& g# x2 P item_start = item[0]* P! _" A; [4 W+ O% h# S Y
item_end = item[-1]; h" I5 {7 v* e( \- R7 ?3 H# q
item_str = re.findall(r'[a-zA-Z]+', item_start)- R7 ^! `- g3 ]& s
if item_str:
7 T3 c2 N6 A8 Y7 v X item_str = item_str[0]
2 A; j1 Q Y! R2 K2 Y0 b, p8 @ else:
+ d' E2 \7 v& m8 v3 X& \! X item_str = first_id_str B' r# O( X+ c G Z! x
data_num = re.findall(r"\d+", item_start)) e3 [8 U/ A2 u. {4 R$ S
item_start_num = int(data_num[0])
8 d( |0 ~, R+ S2 `5 C% P item_end_num = int(re.findall(r"\d+", item_end)[0])2 Z% d% Z( l p3 O" ~7 D
% r0 x& A! e) O4 z: a8 V for a in range(item_start_num, item_end_num + 1):5 ^4 G/ K- b" G" k; d7 C: g" `
c = item_str + str(a)
7 w2 [. G I: O. [. k) X& A! C
: B, O5 q& B- k: p h0 `: L* ^ new_list.append([data[0], data[1], c, pa])) Q( b, ^2 s8 S2 U* ^) E- ~
# print(item_str,item_start_num,item_end_num), j( W7 f% I5 u N9 \: h5 i
else:
; U1 Y5 P; U) _ if i.isdigit():, S" R+ i8 w; a1 ~- L& P% Z% x
c = first_id_str + i: X! F; _7 e. z" }% h3 u7 r" o
new_list.append([data[0], data[1], c, pa])3 M# M( }* h4 i2 t# _
else:
7 M% v4 _7 x# b7 I/ K! F2 L# T new_list.append([data[0], data[1], i, pa]), Q% Z$ Z/ @! k. N/ P
print(new_list): ?- ~: @; D7 H
return new_list
' l5 @9 w8 s% b6 V" l( l/ B* z& P, X& m' R+ `6 S" G8 }
* Z( p6 E5 o V% _/ Y
def parse_data():
4 O- X7 j& E! l+ w- ]7 q for name in file_names:, M. b, T |5 r! M5 n$ J6 I, p% x
print(name)- ^, D3 k2 `6 C# L [
if '.xls' in name:' q$ Z& ^! { E0 y/ T* Y# B/ Z
wb = load_workbook(data_dir + name)- i. M5 N( x+ d: C" o5 ~! I
# print(data_dir+name)5 {2 |, x5 e9 T! G8 z4 z$ [
sheet = wb.active
/ I6 W9 t) z g1 M sheet_data = []
0 S7 m. `; ?" N% `% z! Q: D for rows in sheet:
$ f8 x; o3 p \# _- g; P row_list = []4 D4 J; y" k9 C7 W
for cell in rows:
) G/ f) T! H8 h& v5 g' H row_list.append(cell.value)6 L/ W& a+ ]2 f4 |" G. }
sheet_data.append(row_list)
2 L9 X5 r& E: z5 s # print(sheet_data)! [+ F& T/ W; L8 b. `
2 C |, s% F" t new_sheet_data = []/ b3 p: L3 Y D5 |* K: l5 m# t
for items in sheet_data:
' l9 f" J! X) w& _0 l a6 e if items[2] == None:4 U8 W% i' y* c* x8 s. s
continue4 o3 D* B( x5 K& k1 d( |
data = items[2]0 y2 {+ p' G( L) T1 d
if ',' in data or '-' in data or " " in data:+ H1 t4 K* s% C4 T
new_list = parse(items)
8 N3 a |% `1 ?% p: `5 [ for parse_list in new_list: n4 ]4 Y$ Y. q% \& {9 _
new_sheet_data.append(parse_list)
+ A$ c" o2 t; b! V! { # print(new_list)& i0 w% D8 L: w2 ^3 H
* s6 q. x% h0 u( A3 N! R9 R else:4 H) x# b2 Y* G
new_sheet_data.append(items)6 |% T4 j$ H( J6 P8 b
# print(new_sheet_data)
- \, q1 x' c$ [; ` sheet2 = wb.create_sheet("new_sheet")/ g1 J$ l: l8 `/ L/ L) h
print("创建新的sheet完成,sheet名:new_sheet")
. g, L8 l: E" P, ~ for d in new_sheet_data:
3 e w u8 H/ l) C8 ~4 ], ^ if isinstance(d, list):3 l, s! u- j1 q+ C# \
sheet2.append(d). h% G; b- z8 j
else:* Y$ T* ^1 D8 O0 o
print(d, "格式不对-->", type(d))
' x. c) L3 v! N. X+ X* k" M wb.save(data_dir + name)
& |& [) l5 k/ u2 s wb.close()
6 D" r6 \; }8 |8 `( B print("分解完成")
1 Z) {1 \; x8 K# \. \2 D
/ w4 u" N$ e0 h/ j+ ?3 j$ F' V3 Q# @0 w* f+ W {# ] c
if __name__ == '__main__': c# N- u8 I# [
parse_data()# D8 C9 `/ U. ?, U
7 ?1 b3 G8 q- [" v, r" S) v& k) I
7 t4 Y. Y% E( r6 b/ @% e. Z1 R
) H( P9 n: K3 d! [/ Y+ W1 ?) M, l. q2 C& f) O' ?* Q. j. K
侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
( T- Z0 T) q7 l8 `3 z2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
* B+ f2 ?- k! E" j1 X0 {3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
2 O, ?; {# I: n& R4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
/ ~* o( B8 l: h如有侵权联系邮箱:ruikelink@gmai.com
u- Z# y! X$ g# K9 u资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见, V0 ~9 X1 y2 k Q% N
; o: b# D# H$ r% Z5 `7 U8 `
" P( e, n- ]$ m3 T" H3 {$ Y/ L3 w# L9 Z4 _+ w5 j& r
本资源由Java自学网收集整理【www.javazx.com】 |
|