源文件

序号 订单号 需求单号 送货机房 送货地址 物料编号 物料描述 品名 品牌 型号 期望货期 实际到货日期 固资号 SN码 箱号 数量 送货单数量 待送货数量
100179884521816131 TSPO202201100059 NPA202112100034 敏感信息处理 敏感信息处理 795250EBKF2480 敏感信息处理 网络设备板卡 敏感信息处理 敏感信息处理 2022/7/15 TYNM220105829 FOC2613NF1B 20220513003 1 1 1
100179884521816130 TSPO202201100059 NPA202112100034 敏感信息处理 敏感信息处理 795250EBKF2480 敏感信息处理 网络设备板卡 敏感信息处理 敏感信息处理 2022/7/15 TYNM220105828 FOC2613NEZ5 20220513004 1 2 1
100179884521816129 TSPO202201100059 NPA202112100034 敏感信息处理 敏感信息处理 795250EBKF2480 敏感信息处理 网络设备板卡 敏感信息处理 敏感信息处理 2022/7/15 TYNM220105827 FOC2613NF17 20220513005 1 3 1
100179884521816128 TSPO202201100059 NPA202112100034 敏感信息处理 敏感信息处理 795250EBKF2480 敏感信息处理 网络设备板卡 敏感信息处理 敏感信息处理 2022/7/15 TYNM220105826 FOC2614K5UV 20220513006 1 4 1

目标文件

代码

import qrcode
from barcode import Code128
from barcode.writer import ImageWriter
import pandas as pd
import json
from PIL import Image as ImagePIL
import os
from openpyxl import Workbook
from openpyxl.drawing.image import Image as ImageXL


def qrCodeGen(fName, info):
# info 是SN 码
# 之后会将文件名改成另一个形式,将所有信息进行统一
img = qrcode.make(info)
img.save(f"{fName}")


def barCodeGen(fName, info):
# info 是箱号
# 之后会讲文件名
# image pixel: 324 x 280
img = Code128(info, writer=ImageWriter())
img.save(f"{fName}")


def imgResize(fName, image):
# 图片缩减
# 打开原始图片,修改文件高度
img = ImagePIL.open(image)
img = img.resize((250, 130), ImagePIL.LANCZOS)
img.save(f'{fName}')


def imgCropper(fName, image):
# 剪裁
img = ImagePIL.open(image)
cropped = img.crop((30,30,260,260))
cropped.save(fName)



def excelProcesser(fName):
df = pd.read_excel(fName)
origin = df.to_json()
origin = json.loads(origin)
data = []
for key in origin["序号"]:
# 按每个条目的序号、箱号、数量和SN 码生成一个新的列表
data.append([origin["序号"][key], str(origin["箱号"][key]), str(origin["数量"][key]), origin["SN码"][key], origin["订单号"][key]])
return data


def regularWriter(worksheet, columeA, columeB, line, index):
worksheet[f"{columeA}{line}"] = "PO NO.:"
worksheet[f"{columeB}{line}"] = data[index][4]
worksheet[f"{columeA}{line+2}"] = "BOX ID:"
worksheet[f"{columeB}{line+2}"] = data[index][1]
worksheet[f"{columeA}{line+10}"] = f"QTY: {data[index][2]} PCS"
worksheet[f"{columeA}{line+12}"] = "SN:"


def pixelWriter(worksheet, columeA, line, index):
# 添加箱号Code 128
img = ImageXL(f"{data[index][0]}/Box.png")
worksheet.add_image(img, f"{columeA}{line+3}")
# 添加SN QRCode
img = ImageXL(f"{data[index][0]}/SN.png")
worksheet.add_image(img, f"{columeA}{line+12}")


if __name__ == "__main__":
pass
data = excelProcesser("1.xlsx")
for item in data:
os.mkdir(f"{item[0]}")
qrCodeGen(f"{item[0]}/SN.png", item[3])
barCodeGen(f"{item[0]}/Box", item[1])
imgResize(f"{item[0]}/Box.png", f"{item[0]}/Box.png")
imgCropper(f"{item[0]}/SN.png", f"{item[0]}/SN.png")
wb = Workbook()
ws = wb.active
ws.title = data[0][4]
line = 1
for index in range(len(data)):
if index % 2 == 0:
# 添加订单文字信息
regularWriter(ws, "C", "D", line, index)
# 添加箱号Code 128&QRCode
pixelWriter(ws, "D", line, index)
else:
# 添加订单文字信息
regularWriter(ws, "J", "K", line, index)
# 添加箱号Code 128&QRCode
pixelWriter(ws, "K", line, index)
line += 26
wb.save("2.xlsx")

生成QRCode 并将QRCode 裁剪掉白边

import qrcode
from PIL import Image as ImagePIL


def qrCodeGen(fName, info):
# info 是SN 码
# 之后会将文件名改成另一个形式,将所有信息进行统一
img = qrcode.make(info)
img.save(f"{fName}")


def imgCropper(fName, image):
# 剪裁
img = ImagePIL.open(image)
cropped = img.crop((30,30,260,260))
cropped.save(fName)

生成BarCode 并将Barcode 缩减

from barcode import Code128
from barcode.writer import ImageWriter
from PIL import Image as ImagePIL

def barCodeGen(fName, info):
# info 是箱号
# 之后会讲文件名
# image pixel: 324 x 280
img = Code128(info, writer=ImageWriter())
img.save(f"{fName}")


def imgResize(fName, image):
# 图片缩减
# 打开原始图片,修改文件高度
img = ImagePIL.open(image)
img = img.resize((250, 130), ImagePIL.LANCZOS)
img.save(f'{fName}')

处理原始表格抓取有用数据

在目标文件中,我们实际所需的数据有“订单号”,“SN码”,“箱号“和”数量“。
但为了区分通过SN 生成的二维码和箱号生成的条形码,我们还需要”序号“来创建不同的目录存放对应的数据。
所以最终构成了一个二维列表。[[“序号”, “箱号”, “数量”, “SN码”, “订单号”], [“序号”, “箱号”, “数量”, “SN码”, “订单号”]]

import pandas as pd
import json


def excelProcesser(fName):
# 通过pandas 读取excel 文件
df = pd.read_excel(fName)
# 转化成json 字符串
origin = df.to_json()
# 加载Json 字符串,形成一个字典数据
origin = json.loads(origin)
data = []
for key in origin["序号"]:
# 按每个条目的序号、箱号、数量、SN 码和订单号生成一个新的列表
data.append([origin["序号"][key], str(origin["箱号"][key]), str(origin["数量"][key]), origin["SN码"][key], origin["订单号"][key]])
return data

工作流程

  1. 处理原始表格获取需求数据
  2. 通过“序号”值,生成对应的目录
  3. 生成二维码和条形码到对应“序号”目录,通过PIL 调整生成的图像大小或剪裁
  4. 生成一个新的Excel 表格
  5. 根据订单号修改sheetname
  6. 通过标准化输入,依次写入需要值和图像
  7. 最后保存为”2.xlsx”

requirements.txt

asgiref==3.5.1
click==8.1.3
et-xmlfile==1.1.0
Flask==2.1.2
image==1.5.33
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
numpy==1.22.3
openpyxl==3.0.9
pandas==1.4.2
Pillow==9.1.0
python-barcode==0.13.1
python-dateutil==2.8.2
pytz==2022.1
qrcode==7.3.1
six==1.16.0
sqlparse==0.4.2
Werkzeug==2.1.2
xlwt==1.3.0