【Python办公自动化】教你20行代码,俘获女朋友芳心,基于Python openpyxl、docxtpl批量将excel数据转换为word文件

业务背景:适用于需要批量复制的各类word模板,请假单,申请单等等

女朋友最近因为一个事情经常加班到很晚,我了解一下情况后,原来是因为一个word需要一直从excel里所有数据复制粘贴复制粘贴,最后打印出来(如下图格式,数据实际更多),由于数据量庞大,女朋友1个小时,2个小时,3个小时,工作到了深夜……
在这里插入图片描述
在这里插入图片描述

思路:

通过Python openpyxl操作excel,获取excel中的数据,再通过Python
docxtpl的DocxTemplate
遍历将数据渲染到word中,然后保存

Python DocxTemplate基本常用语法:

1、数据渲染:{{ val }}
2、条件判断:
{%p if 表达式 %}
内容
{%p endif %}
3、循环:
{% for item in itemList%}
内容
{% endfor %}

解决:

数据格式:
arr = [
    {'payer':'张三','beneficiary':'李四','money':100,'signatory':'张三'}
   ,{'payer':'李四','beneficiary':'王五','money':200,'signatory':'李四'}
]

新建一个word,按照模板,要用循环语句,替换相应的数据,因为要换页,所以将循环结束在下一页,最后渲染
在这里插入图片描述
最终效果:
在这里插入图片描述
完整代码:

# coding=utf-8
import openpyxl
import docxtpl
import time

start_time = time.time()
wb = openpyxl.load_workbook('数据.xlsx', data_only=True)
ws = wb.worksheets[0]
ls = list(ws.values)[1:]
arr = [{'payer':x[0],'beneficiary':x[1],'money':x[2],'signatory':x[3]} for x in ls]

word = docxtpl.DocxTemplate(r'模板.docx')
context = {
    'list':arr
}

word.render(context)
word.save("结果.docx")

end_time = time.time()
all_time = end_time - start_time
print('共执行:%s s' % all_time)

结果:耗时0.058秒
在这里插入图片描述

模拟1000条数据量,耗时1.41秒
在这里插入图片描述
1000的数据量,在word中,手动复制粘贴怕是没个半天都完成不了,而用Python,仅仅耗时1.41秒,这个工作上的效率不是提高的一点点啊。

最后,我用20行代码,俘获了女朋友的芳心,女朋友忙完活已经在喝茶打王者了(^_−)☆,隔壁妹子还在啃嗤啃嗤的继续无止境的复制粘贴复制粘贴…(✪ω✪)

  • 32
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值