问题描述:利用python从金碟导出excel数据中提取并按模板批量成生发货单
图1为数据源结构
编辑图2为要生成发货单的的模板
编辑金碟源数据假设是4行数据是要写入到发货装箱单模板,如图2所示,生成的结果也是4行的数据。
思路说明:
- 制作发货装箱单模板,把需要列信息名称写到查模板中,如:日期,购货单位,单据编号等等,想要哪列的数据就在标头写入哪列的;
- 设置单元格格式,字体,字体大小,字色等格式;
- 加上日期批量生成成果;
代码:
#python实现vlookup,查找两列中的相同数据并进行标记
import openpyxl
import time
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment, Color
from datetime import datetime, date, time
today = str(date.today())
print(today)
# print('-----------------------------以下是表格2人民币报价单------------------------- ')
#打开工作簿
wb = openpyxl.load_workbook('发货装箱单.xlsx')
#选取sheet
ws = wb['金蝶数据']
ws2 = wb['装箱单模板']
max_r1=ws.max_row #表1最大行
print(max_r1)
# 样式
border2 = Border(
left=Side(border_style='thin',color='000000'),
right=Side(border_style='thin',color='000000'),
top=Side(border_style='thin',color='000000'),
bottom=Side(border_style='thin',color='000000')
)
font2 = Font(name="微软雅黑",size=10,color="000000")
for i in range(1,max_r1):
print(i+1)
c = ws.cell(i+1,3).value
ws2.cell(i+2,1,value=c)
# ws2.cell(i+2,1).border = border2
d = ws.cell(i + 1, 4).value
ws2.cell(i + 2, 2, value=d)
# ws2.cell(i + 2, 2).border = border2
e = ws.cell(i + 1, 5).value
ws2.cell(i + 2, 3, value=e)
# ws2.cell(i + 2, 3).border = border2
ii = ws.cell(i + 1, 9).value
ws2.cell(i + 2, 5, value=ii)
# ws2.cell(i + 2, 5).border = border2
j = ws.cell(i + 1, 10).value
ws2.cell(i + 2, 6, value=j)
# ws2.cell(i + 2, 6).border = border2
k = ws.cell(i + 1, 11).value
ws2.cell(i + 2, 7, value=k)
# ws2.cell(i + 2, 7).border = border2
q = ws.cell(i + 1, 17).value
ws2.cell(i + 2, 4, value=q)
# ws2.cell(i + 2, 4).border = border2
r = ws.cell(i + 1, 18).value
ws2.cell(i + 2, 9, value=r)
# ws2.cell(i + 2, 9).border = border2
s = ws.cell(i + 1, 19).value
ws2.cell(i + 2, 8, value=s)
# ws2.cell(i + 2, 8).border = border2
ws2.merge_cells('A{}:I{}'.format(max_r1+2,max_r1+2)) #这样可以?神奇#合并
ws2.cell(max_r1+2,1,value='以上型号确保原装芯片')
ws2.cell(max_r1+2,1).alignment = Alignment(horizontal='left', vertical='center')#以上型号确保原装芯片
for p in range(1,10):
ws2.cell(max_r1+2,p).border = border2
ws2.row_dimensions[max_r1+2].height = 30
ws2.cell(max_r1+4,5,value='单位名称:(盖章)')
ws2.cell(max_r1+4,6,value='上海**电子科技有限公司')
ws2.cell(max_r1+6,6,value=today)
for u in range(3,max_r1+2):
# print(u,'u')
ws2.row_dimensions[u].height = 30
for y in range(1,10):
# print(u,'u',y, 'y')
ws2.cell(u,y).border = border2
ws2.cell(u,y).alignment = Alignment(horizontal='center', vertical='center')
ws2.cell(u, y).font = font2
wb.save('发货装箱单_'+today+'.xlsx')
总上所述,python在处理excel方面具有非常优秀的功能,可以根据实际业务流程需要进行精准定制exe执行文件,一键批理提取和生成,此案例还可以写成工作流批量生成所有客户发货单,有类似这方面需求的朋友欢迎交流和咨询。