python docxtpl循环渲染多个word模板时遇到的问题

在办公自动化项目中,使用Python的docxtpl库可以高效地根据数据批量生成企业客户信用档案。该库基于python-docx和jinja2,支持文本和图片的模板渲染。然而,在循环中创建模板对象会导致只能生成一个文件。为解决此问题,可以通过将模板渲染过程封装到函数中,确保每次循环结束后对象被销毁,从而能够成功创建多个模板。
摘要由CSDN通过智能技术生成

       最近做办公自动化,减少文员办公成本时,需要使用根据数据创建几千个企业客户的信用档案, 大概是一张大表.如果手动创建填空,需要很长时间.我们使用Python的Python-docx库可以自动写入文档,但是如果大致是一样的内容,我们可以使用docxtpl库,这个库是基于python-docx库和jinja2写的,可以渲染模板.我们需要批量创建word文件时, 使用docxtpl可以快速渲染出想要的word文件.类似于前端的渲染.只要在想要插入数据的地方插入类似于{ { a }}的标签,传入字典{ { "a": 123 }} 就能在标签上渲染出数据123. docxtpl还支持图片,子文档等. 但是目前图片和子文档的支持还不够完善.

     一开始, 我是这么写的, 但是发现只能创建一个docx文件, 可能是因为在循环里创建模板对象会出现问题, 可能是循环时对象没有回收, 而tpl对象可能是单例的(我看源代码时没发现, 但想不出别的原因了)

       

data = pandas.read_excel(excel)
    for index, dc in data.iterrows():
        tpl = docxtpl.DocxTemplate(tpl)
        context["企业名称"] = dc["企业名称"]
        context["法人"] = dc["法人"]
        context["处罚日期"] = dc["处罚日期"]
        context["注册地"] = dc["注册地"]
        context["统一社会信用代码"] = dc["统一社会信用代码"]
        context["信息报送机关"] = dc["处罚机关"]
        context
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值