Skip to content

docxtpl实战项目分享

一、简介 WHAT

docxtpl 官方文档:https://docxtpl.readthedocs.io/en/latest/
python-docx 官方文档:https://docxtpl.readthedocs.io/en/latest/#
jinja2 官方文档:https://jinja.palletsprojects.com/en/3.1.x/

docxtpl = python-docx + jinja2

二、缘由 WHY

  • python-docx 在创建文档方面非常强大,但在修改文档方面却稍显鸡肋。
  • 插值语法特性,对于处理固定模板非常高效。

二、使用 HOW

1. 安装

  • pip
pip install docxtpl
  • conda
conda install docxtpl --channel conda-forge

2. 模板语法

我正在学习{{ language }}。
  • 条件语句
{% if score > 80 %}
太秀了!
{% else %}
继续加油!
{% endif %}
  • 循环语句
{%tr for row in table %}
{{ row.name }}
{%tr endfor %}
  • 渲染数据
from docxtpl import DocxTemplate

# 1. 初始化模板
template = DocxTemplate('./模板文件.docx')

# 2. 填充数据
context = {'hello': 'world'}

# 3. 渲染数据
template.render(context=context)

# 4. 保存文件
template.save('new.docx')

3. 示例

word模板内容: img.png

python示例代码:

from docxtpl import DocxTemplate


def show_basic_usage():

    # 指定模板文件(土坑)
    tpl = DocxTemplate('word模板.docx')

    # 动态数据(萝卜)
    context = {
        'name': '小鸟鸣',
        'language': 'Python',
        'city': '深圳',
        'freelance': [
            {'month': '二月','spider': 8888,'statistic': 8888,'live': 8888},
            {'month': '三月','spider': 9999,'statistic': 9999,'live': 9999}
        ]
    }

    # 渲染数据(插值)
    tpl.render(context=context)

    # 保存文件
    tpl.save("输出结果.docx")


if __name__ == '__main__':
    show_basic_usage()

项目分享

致谢:雪狐

项目地址:https://docs.qq.com/doc/DTmdOTGtvcEJoZ1BE