记忆劫匪 发表于 2024-7-27 19:24:03

python实现的生产BOM实现标准输出

解决问题点
拿到一个产品的BOM,有许多位号对应的原材料品番。

买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。

处理之前
品番使用数量位号品番111C357,370,374-376,383-385,387-389品番211C14,15,131,221-223,235-237,241,242品番39C12,13,88,90,92,96,100,103,104品番48C111,112,115,117,119,121,122,130品番511C132,218-220,230-234,245,246品番648C257-280,290-304,307-310,317-321

处理之后
品番使用数量位号品番111C357品番111C370品番111C374品番111C375品番111C376品番111C383品番111C384品番111C385品番111C387品番111C388品番111C389品番211C14品番211C15品番211C131品番211C221品番211C222品番211C223品番211C235品番211C236品番211C237品番211C241品番211C242品番39C12品番39C13品番39C88品番39C90品番39C92品番39C96品番39C100品番39C103品番39C104品番48C111品番48C112品番48C115品番48C117品番48C119品番48C121品番48C122品番48C130品番511C132品番511C218品番511C219品番511C220品番511C230品番511C231品番511C232品番511C233品番511C234品番511C245品番511C246品番648C257品番648C258品番648C259品番648C260品番648C261品番648C262品番648C263品番648C264品番648C265品番648C266品番648C267品番648C268品番648C269品番648C270品番648C271品番648C272品番648C273品番648C274品番648C275品番648C276品番648C277品番648C278品番648C279品番648C280品番648C290品番648C291品番648C292品番648C293品番648C294品番648C295品番648C296品番648C297品番648C298品番648C299品番648C300品番648C301品番648C302品番648C303品番648C304品番648C307品番648C308品番648C309品番648C310品番648C317品番648C318品番648C319品番648C320品番648C321
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。
测试运行环境:
python版本 :python 3.7
IDE:Pycharm2022.1.1
模块使用:os,re,openpyxl,tkinter

源码:初次发表,源码如下:
# -*- coding:utf-8 -*-
"""
# @File : excel数据拆分.py
# @Author:chen
# @Date : 2024/1/5
# @Desc :
"""
import re
import os
from tkinter import filedialog
from openpyxl import load_workbook

# 定义文件夹路径
# folder_path = os.path.dirname(os.path.abspath(__file__))
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'

# 列出文件夹中的所有文件和文件夹
files = os.listdir(data_dir)

# 遍历文件列表,筛选出文件名
file_names = for file in files if os.path.isfile(os.path.join(data_dir, file))]
print("需要处理的文件名:", file_names)


def parse(data):
    list1 = []
    if ',' in data[2]:
      list2 = data[2].split(',')
      # print(list2)
      # print("*"*90)
      list1 = for i in list2 if i is not '']
      # print(list1)
    elif ' ' in data[2]:
      list2 = data[2].split(' ')
      # print(list2)
      # print("*"*90)
      list1 = for i in list2 if i is not '']
    else:
      list1 = 2]]
      # print(list1)

    # 针对第一个字母的多个回路改进C300-335,350-405,407,268-275,520
    # 问题点 回路没有字母的需要判断一下
    new_list = []
    first_id = list1[0]
    if first_id.isdigit():# 判断回路是不是纯数字组成
      first_id_str = ''
    else:
      first_id_str = re.findall(r'+', first_id)[0]

    # 添加代替品
    pa = ''
    if len(data) >= 4:
      pa = data[3]

    for i in list1:
      if '-' in i:
            print("带-或空格的回路开始分解")
            item = i.split('-')
            item_start = item[0]
            item_end = item[-1]
            item_str = re.findall(r'+', item_start)
            if item_str:
                item_str = item_str[0]
            else:
                item_str = first_id_str
            data_num = re.findall(r"\d+", item_start)
            item_start_num = int(data_num[0])
            item_end_num = int(re.findall(r"\d+", item_end)[0])

            for a in range(item_start_num, item_end_num + 1):
                c = item_str + str(a)

                new_list.append(0], data[1], c, pa])
            # print(item_str,item_start_num,item_end_num)
      else:
            if i.isdigit():
                c = first_id_str + i
                new_list.append(0], data[1], c, pa])
            else:
                new_list.append(0], data[1], i, pa])
    print(new_list)
    return new_list


def parse_data():
    for name in file_names:
      print(name)
      if '.xls' in name:
            wb = load_workbook(data_dir + name)
            # print(data_dir+name)
            sheet = wb.active
            sheet_data = []
            for rows in sheet:
                row_list = []
                for cell in rows:
                  row_list.append(cell.value)
                sheet_data.append(row_list)
            # print(sheet_data)

            new_sheet_data = []
            for items in sheet_data:
                if items[2] == None:
                  continue
                data = items[2]
                if ',' in data or '-' in data or " " in data:
                  new_list = parse(items)
                  for parse_list in new_list:
                        new_sheet_data.append(parse_list)
                  # print(new_list)

                else:
                  new_sheet_data.append(items)
            # print(new_sheet_data)
            sheet2 = wb.create_sheet("new_sheet")
            print("创建新的sheet完成,sheet名:new_sheet")
            for d in new_sheet_data:
                if isinstance(d, list):
                  sheet2.append(d)
                else:
                  print(d, "格式不对-->", type(d))
            wb.save(data_dir + name)
            wb.close()
            print("分解完成")


if __name__ == '__main__':
    parse_data()




侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
如有侵权联系邮箱:ruikelink@gmai.com
资源下载地址和密码(百度云盘):**** Hidden Message ***** 百度网盘信息回帖可见



本资源由Java自学网收集整理【www.javazx.com】

无花果汁 发表于 2024-7-27 19:44:14

强烈支持楼主ing……

momotina 发表于 2024-8-5 23:48:32

Hell_king 发表于 2024-8-6 18:52:44

要赶紧学习了,走起

陈、陈、 发表于 2024-8-6 20:55:09

学编程 就这儿了

不高不帅没钱 发表于 2024-8-9 18:09:47

大佬厉害呀

爱本格瑞斯 发表于 2024-8-13 12:01:17

学习编程好地方 加油

20123131231 发表于 2024-8-20 11:26:25

资料不错,赶快下载

茶叶 发表于 2024-8-25 22:25:07

想看------------------

要做淑女 发表于 2024-9-7 09:19:08

1111111好资源
页: [1] 2 3
查看完整版本: python实现的生产BOM实现标准输出