物料标签智能批量生成

要求:需要生成此样式的标贴用于产品包装,以便识别每种产品相关信息。

物料标签智能批量生成

可以使用python在Excel表格的基础上快速生成,下表Excel把需要的数据填写,则自动生成标贴

物料标签智能批量生成

处理步骤流程

  1. 从“info”工作表读取所有物料的信息
  2. 转换字母为大写,存储好信息
  3. 将处理好的信息逐个写入到“label”工作表
  4. 保存工作表
# 从“info”工作表读取并处理信息,存入列表
from openpyxl import load_workbook
def get_info(path):
    wb = load_workbook(path)
    ws = wb['info']
    info=[]
    for row in range(2, ws.max_row+1):
        brand = ws['A' + str(row)].value
        if brand: # 判断“品牌”是否为空值,若为空值则不进行小写字母的转换
                  # 若无这行,当遇到“品牌”为空值时,程序会报错,因为空值无法进行大小写转换
            brand=brand.upper() #将“品牌”中的小写字母全部转换成大写字母
        typ = ws['B' + str(row)].value # 获取单元格中的数据
        pn = ws['C' + str(row)].value
        lotno = ws['D' + str(row)].value
        date = ws['E' + str(row)].value
        if date: # 判断“日期时间”是否为空值,若为空值则不进行日期获取
                 # 若无这行,当遇到“日期时间”为空值时,程序会报错,因为空值无法进行日期获取
            date=date.date() #只获取日期时间中的日期,比如2019-2-20,不需要具体时间
        quantity = str(ws['F' + str(row)].value)+" pcs" # 在数量后面加上“pcs”字样
        data={
            "brand":brand,
            "typ":typ,
            "pn":pn,
            "lotno":lotno,
            "date":date,
            "quantity":quantity
        }
        info.append(data)
    return info
%%time
# %%time 用于查看程序运行所需时间
path="data\label_info.xlsx"
info=get_info(path)#数据读出存入info
print("finished")
#finished
#Wall time: 188 ms
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
# 以上两行是为了让输出全部显示,如果没有它们,如下Out只会显示最后一个info[0]的结果,而不会显示len(info)=70的结果
len(info)
info[0]

#显示结果
{'brand': 'SH1',
 'typ': '11X11-XX761X8',
 'pn': '011-0076108',
 'lotno': 'Q19H023994901',
 'date': datetime.date(2021, 2, 20),
 'quantity': '300 pcs'}

将处理好的信息逐个写入到“label”工作表并保存 

# 将处理好的信息逐个写入到“label”工作表并保存
def write_info(path,info):
    wb = load_workbook(path)
    ws = wb['label']
    k=0
    for i in range(2,9,3): #列遍历
        for j in range(1,round(len(info)*7/3),7): #行遍历
            if k < len(info): #当数据条数不是3的整数倍时,计数器k会超出列表info的范围,后续代码只有在k < len(info)的情况下执行
                ws.cell(row=j, column=i).value = info[k]['brand']
                ws.cell(row=j+1, column=i).value = info[k]['typ']
                ws.cell(row=j+2, column=i).value = info[k]['pn']
                ws.cell(row=j+3, column=i).value = info[k]['lotno']
                ws.cell(row=j+4, column=i).value = info[k]['date']
                ws.cell(row=j+5, column=i).value = info[k]['quantity']
            k+=1 #k是列表info的索引,此处加一以便获取下一条数据
    wb.save(path) #保存Excel文件

将读出的数据写入label表格

%%time
path="data\label_info.xlsx"
write_info(path,info) #调用write_info函数,将数据写入并保存
print("Finished!")
#Finished!
#Wall time: 381 ms

单元格相关信息

wb = load_workbook("data\label_info.xlsx")  #获取的路径名字,也就是表格
type(wb)
#openpyxl.workbook.workbook.Workbook
ws=wb['info']   #取得得相关工作表
type(ws)
#openpyxl.worksheet.worksheet.Worksheet
ws.max_row  #单元格中的使用总行数
ws
#71
#<Worksheet "info">
len(info)
#70
info[0]
{'brand': 'SH1',
 'typ': '11X11-XX761X8',
 'pn': '011-0076108',
 'lotno': 'Q19H023994901',
 'date': datetime.date(2021, 2, 20),
 'quantity': '300 pcs'}

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
# 以上两行是为了让输出全部显示,如果没有它们,如下Out只会显示最后一个info[0]的结果,而不会显示len(info)=70的结果
len(info)
info[0]
{'brand': 'SH1',
 'typ': '11X11-XX761X8',
 'pn': '011-0076108',
 'lotno': 'Q19H023994901',
 'date': datetime.date(2021, 2, 20),
 'quantity': '300 pcs'}

 

 

 

 

 

上一篇:Pandas数据分析实战03


下一篇:桥接模式