|
解决问题点
/ c, a3 M. [" i: u. ` G1 J! R3 t拿到一个产品的BOM,有许多位号对应的原材料品番。/ @! ?1 Z3 z( q$ Y% r& g2 c* o
; c7 [0 w2 ?1 _* ~/ L+ d6 T买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
/ L1 h5 F$ W @& k5 T: @! C/ _1 B' J0 W. M$ U8 L
处理之前. c1 A; y. ^! ?4 q4 C, o! s& c
[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* Y a9 k9 @' R9 u9 n1 u1 |/ e
) s1 v8 n& K, S处理之后5 N- u/ z0 G2 ^- g9 D7 }
[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]C3215 P! m" G% H# K, |& {3 R
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。/ u+ S# x% ]# [" f" V
测试运行环境:" d* l( ? ?1 F* j
python版本 :python 3.7
3 f, ]4 I/ j6 ZIDE:Pycharm2022.1.1
5 l; S; ~2 i0 Z模块使用:os,re,openpyxl,tkinter' e3 K/ _. d6 E1 l
9 y2 n' w( o* W& M" P4 l$ t- a; L源码:初次发表,源码如下:! b; {- H/ x# O: @, B2 d9 t
# -*- coding:utf-8 -*-
1 i# `4 C- g9 D"""
* {+ ]# |* v9 \- K& Z# @File : excel数据拆分.py
9 S9 G8 s9 P/ R3 Q* J* W4 h# @Author:chen
4 c* g* ]% P) d7 g% c& v# @Date : 2024/1/5& z% p" C+ ]% b6 z, |
# @Desc :
7 w+ v. `8 w8 q# X( y9 ]1 ~! q"""
" o- r1 ^8 c4 T* M" Q2 |% k0 P2 fimport re
/ G: O( M, n- o) e q, T! n. @import os& [: t" M: F( a$ K
from tkinter import filedialog
# w Z9 F5 T# j* | \from openpyxl import load_workbook
% l6 V' Y1 z2 L5 k1 _# V; p& P( X2 I0 r& e
# 定义文件夹路径3 q2 F( p8 q" H+ t. a5 l+ C
# folder_path = os.path.dirname(os.path.abspath(__file__)). p- D- V+ {( U1 f# C- |2 x
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
, H! s. g% h, v& G5 f% n" T9 H- [1 Z+ |
# 列出文件夹中的所有文件和文件夹
) l# [# V7 {( r* ]' C+ I: Z% xfiles = os.listdir(data_dir)$ }* S2 M; I4 Y6 o" T
) Y( R( p* o9 \3 [% q* n
# 遍历文件列表,筛选出文件名 o0 M* M6 U" \4 I/ }
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
/ C2 v" X5 m- ~3 L3 k. Xprint("需要处理的文件名:", file_names)+ K& a" i; _% w' q% l# {
( l4 M8 A) M: L4 y$ j
8 u! S6 H8 f; i, J( L7 d" {8 `: N
def parse(data):0 E" h+ ^7 i( N1 @0 t
list1 = []/ i- L& ~, _0 r/ {( {7 F
if ',' in data[2]:0 ]9 G' x3 P1 E1 {9 f# ?
list2 = data[2].split(',')
: f- y$ O- G8 @" c! v # print(list2)
, X) k3 E) c q # print("*"*90)5 g* ]8 H$ ~8 v5 t4 h2 D2 Q( |
list1 = [i for i in list2 if i is not '']- c$ f; p! C- S2 b. r$ ^) c* z
# print(list1): `3 D! @7 [* o2 T4 k3 s8 ]% w# }4 M
elif ' ' in data[2]:
$ ^6 f$ a6 [) A list2 = data[2].split(' ')$ U! n Y! B" O i; T2 j
# print(list2)9 w& @* O1 a0 M! }0 U; K
# print("*"*90)& b# _+ F4 k* C% g$ i, t. Q% a# i
list1 = [i for i in list2 if i is not '']
5 T; A2 A3 d T else:
0 d# g i. S% Y list1 = [data[2]]
! S6 H% f& r# N # print(list1)
3 H S9 Q) I% G3 |& P( c$ X' d4 [
# 针对第一个字母的多个回路改进 C300-335,350-405,407,268-275,520
4 ?' \; k2 a$ Q6 p # 问题点 回路没有字母的需要判断一下% S2 y( c- A4 l$ ]+ b+ |
new_list = []
2 _" E- _5 X$ D0 [# {" r: a first_id = list1[0]
9 _+ I4 @: y- d if first_id.isdigit(): # 判断回路是不是纯数字组成 l k d8 E' u: {
first_id_str = ''
6 @. r a @5 V8 L6 ~/ n3 K else:" ?! ^( g* x" ^' H
first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]: k) c3 L' o5 q, @' s$ ~7 V
3 M. D$ G0 i) ]- D% V* Y # 添加代替品
; ]- f- V# \2 a# { pa = ''
* o- T) g) ^. f' T: w' Z if len(data) >= 4:9 t/ V) g/ \9 {, \" `' W
pa = data[3]
/ V6 m! }9 P; [8 Z4 ]# [5 U; o0 p2 q% ~
for i in list1: j$ y3 L& ]5 Q K$ M
if '-' in i:2 T8 H& O/ q% {3 f2 O; ~
print("带-或空格的回路开始分解")/ X9 b$ o5 O8 S& t9 C+ T
item = i.split('-')
6 ^3 @; h/ ?4 z1 h item_start = item[0]
2 P2 j5 g/ Y) Y item_end = item[-1]
& T" {1 q2 d* C7 g) y: C item_str = re.findall(r'[a-zA-Z]+', item_start)
3 m G' H% A0 [4 s" ] if item_str:4 v2 y0 @8 j" ~ i( P
item_str = item_str[0], ~, m7 c$ B/ [1 H6 a
else:* c0 n, y( Q+ K) `- b
item_str = first_id_str
+ i5 x+ K9 ~+ I i data_num = re.findall(r"\d+", item_start)
7 N! e8 o* D; H) { M item_start_num = int(data_num[0])2 w8 J" z& b3 e3 c9 X& F" m
item_end_num = int(re.findall(r"\d+", item_end)[0])
\" L' ?6 e4 g- m0 [4 E, v
4 p0 _- V9 p# u; V% Z- k for a in range(item_start_num, item_end_num + 1):
( i' w) k$ z- T9 l5 N" y8 i& ` c = item_str + str(a)5 W$ F5 h( K4 `, b
* N% B! h7 c8 Y, o/ _
new_list.append([data[0], data[1], c, pa])
# d3 q# J8 J1 C" e5 P0 _ # print(item_str,item_start_num,item_end_num)
! Q( q6 w5 A0 P: r( I else:
) j) C, s g6 y6 N; \. `# a) N if i.isdigit():
/ O0 B& r+ g- u. F' g3 Y c = first_id_str + i
+ K: l' l7 Q7 M new_list.append([data[0], data[1], c, pa])4 j0 c( }/ _, k) n. U) i
else:
# M' V/ n9 }& C7 ?3 S* q% |! C! a& e new_list.append([data[0], data[1], i, pa])% b& ?" V: {% Z
print(new_list)
4 [. ^1 A1 e s0 ^: C' ^- Z" Y" _ return new_list& s0 G( c4 \- W& S+ B
- u8 P6 v; O ?; t) E
5 ]$ D. c& U. [* y+ O
def parse_data():
4 S" G( A9 v# C; | o# m, } for name in file_names:
( |( c9 ]7 V! x6 w( g print(name)
8 n5 h1 o( o& X2 h% B if '.xls' in name:
4 ]4 o+ J3 u1 T( U2 E% Z wb = load_workbook(data_dir + name)8 \+ j, W4 k j; B/ B" G
# print(data_dir+name)
" G1 t1 N, O6 \& q0 F sheet = wb.active
( P. Q U: J1 U% w( _ sheet_data = []
8 m/ l+ s0 e/ b' N2 | for rows in sheet:; N: T" W6 y# u" ? v
row_list = []
* B( S! C, g2 W, L for cell in rows:
% s6 Q) U; b' I2 Y/ T: e; p, B row_list.append(cell.value)/ v5 j2 x; }0 c& D' m8 V# G2 \/ H
sheet_data.append(row_list)
2 T: B3 | H$ c0 O+ e. A # print(sheet_data)
1 Z% f" p# k. J5 B& H* ^. u) |& \$ D9 q; ? F* h" |
new_sheet_data = []
, i6 k% I. A/ k, x: {3 J3 m for items in sheet_data:
5 g: }! P: R3 H if items[2] == None:- R( [3 h& I1 X9 Z
continue
9 \! \* O# f2 e# }9 G6 m data = items[2]
k$ D% z0 m& o; W. Y if ',' in data or '-' in data or " " in data:5 }& l8 U' l6 R: a5 S
new_list = parse(items)
: `" y2 u9 V" D" L" | for parse_list in new_list:% d8 ^: d- ?8 e v( r8 G
new_sheet_data.append(parse_list). X$ W, W4 c" i# q+ T. X
# print(new_list)# H1 n9 e' A! s* u, s0 h* E2 o
- Y1 Z6 M7 Q, L& S7 ]' _* s else:/ F7 a& B2 D( {! _/ `5 ]
new_sheet_data.append(items)( d3 O6 U9 ~9 F n, |
# print(new_sheet_data)
& t0 d, L2 k" m- I sheet2 = wb.create_sheet("new_sheet")
* l. o6 l9 ^# a5 @ print("创建新的sheet完成,sheet名:new_sheet")
- \$ Z2 W% |) U$ f for d in new_sheet_data:
8 I6 E) V1 x8 S$ r5 {0 [ if isinstance(d, list):4 P% j: f" X! B5 |7 Z& c$ J! d
sheet2.append(d), e& o+ b, v0 [
else:2 V+ w1 p6 K& n1 l" H- s7 v! | Z
print(d, "格式不对-->", type(d)), j8 \& c: } t9 d L! Z6 a
wb.save(data_dir + name)6 c' z! c" c5 L9 l2 X6 D0 f/ F! y
wb.close()
- ^) F, i1 `! k; c* t8 T print("分解完成")2 M+ Y6 O, _) w
/ {* h0 S4 i8 @/ K+ x* J! v( X! K4 { ^/ S$ O' E" H8 @
if __name__ == '__main__': P/ x: S* F4 r4 p$ v
parse_data()
2 }5 B& |; n! g/ C* X
+ U* V' ~4 D3 N1 V# b' Z7 \# d0 p
0 c% \2 s4 J( g) _! U, C
9 a$ P8 q3 ?# `
; v' p" h! e" S% u侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
/ _- @4 t9 J2 P) x$ [( A' t3 y2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除+ y$ ?: |( a& g2 w* E
3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
5 x# f& i& `8 z# Y R2 P# o4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
) F# T3 g `' Y, O1 X如有侵权联系邮箱:ruikelink@gmai.com! d6 N- c+ \' i8 S: D
资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见' T8 y! ?/ ]8 M# O! o; z8 _
) X' R2 m. C" v# V* a. |
/ t: o- s9 ]5 }" G( [3 W. W
/ H( x0 h* p! q4 O8 l8 x- w
本资源由Java自学网收集整理【www.javazx.com】 |
|