python操作docx文档, 使用python-docx配合docxtpl操作模板动态生成docx文档

前言: 今天的工作中遇到一个没接触过的需求, 需求是这样的, 把数据库中的数据读出来, 填充到docx文件(docx文件里的内容不固定, 可能很多, 可能没有), 这个需求也是今天遇到的, 一开始是在看python-docx的官网, 希望能找到好的解决办法, 旁边一位前辈指让我用docxpl操作docx模板来达到目的, 说这个省事很多, 这里研究一下
准备工作: pip install python-docx, pip install docxtpl(或者直接安装后者, 后者依赖前者, 会把前者也下载下来)
1. 大致说一下思路, 这个实现的思想, 和前端的一些框架, Angularjs, Vue-----把模板中的标签, 替换成对象或者数组中的真实数据, 主要用到的是Python后端的模板渲染语言Jinja2, 因为现在都是前后端分离的项目, 像Jinja2这种强大的后端渲染语言用的人越来越少, 这里就被大神们用来操作docx文档
# 这里用代码生成了一个简单的表格, 然后用wps加了一个表格样式, 手动加了表头, 表名...效果入下
from docx import Document

doc = Document('new.docx')
tb = doc.add_table(rows=5, cols=5)
doc.save('new.docx')

在这里插入图片描述

2. 准备一些数据
obj = {
    'name': '张三',
    'age': 18,
    'high': 180,
    'weight': 90,
    'address': '安徽',
    'more': [
        {
            'name': '李四',
            'age': 20,
            'high': 190,
            'weight': 80,
            'address': '山东'
        },
        {
            'name': '王五',
            'age': 22,
            'high': 175,
            'weight': 79,
            'address': '河南'
        },
        {
            'name': '麻子',
            'age': 25,
            'high': 178,
            'weight': 70,
            'address': '广东'
        },
        {
            'name': '王二',
            'age': 22,
            'high': 182,
            'weight': 78,
            'address': '上海'
        },
    ]
}

from docxtpl import DocxTemplate

tpl = DocxTemplate('new.docx')

tpl.render(obj)  # 注意这个数据只能有一个, 数据内容可以复杂
tpl.save('test.docx')
3. 处理一下表格

在这里插入图片描述

4. 效果如下

在这里插入图片描述

5. 总结: 这里时间关系, 我只用到了操作表格部分语法, 还有其它丰富的字体, 颜色, 样式, 等等花里胡哨的东西, 暂时就不研究了, 有用到其它功能的小伙伴, github搜索python-docx-template, 里面有个tests包, 里面各种示例

在这里插入图片描述
不过不知道什么原因, github上面的这个地址由于网络的问题, 可能因为我是晚上搜的, 文件template文件打不开, 下载不了, 这里如果小伙伴们也和我一样看不了, 推荐去码云上面搜, 可以下载!

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值