要求:需要生成此样式的标贴用于产品包装,以便识别每种产品相关信息。
可以使用python在Excel表格的基础上快速生成,下表Excel把需要的数据填写,则自动生成标贴
处理步骤流程
- 从“info”工作表读取所有物料的信息
- 转换字母为大写,存储好信息
- 将处理好的信息逐个写入到“label”工作表
- 保存工作表
# 从“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'}