02利用python从金碟导出excel数据中提取并按模板批量成生发货单

180 阅读3分钟

微信截图_20241228162835.png

问题描述:利用python从金碟导出excel数据中提取并按模板批量成生发货单

图1为数据源结构

​编辑图2为要生成发货单的的模板

​编辑金碟源数据假设是4行数据是要写入到发货装箱单模板,如图2所示,生成的结果也是4行的数据。

思路说明:

  1. 制作发货装箱单模板,把需要列信息名称写到查模板中,如:日期,购货单位,单据编号等等,想要哪列的数据就在标头写入哪列的;
  2. 设置单元格格式,字体,字体大小,字色等格式;
  3. 加上日期批量生成成果;

代码:

#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执行文件,一键批理提取和生成,此案例还可以写成工作流批量生成所有客户发货单,有类似这方面需求的朋友欢迎交流和咨询。