基于docxtpl的模板生成Word

news/2024/9/23 23:38:56/

docxtpl是一个用于生成Microsoft Word文档的模板引擎库。它结合了docx模块和Jinja2模板引擎,使用户能够使用Microsoft Word模板文件并在其中填充动态数据。这个库提供了一种方便的方式来生成个性化的Word文档,并支持条件语句、循环语句和变量等控制结构,以满足不同的文档生成需求。

docxtpl是基于python-docx和jinja2开发出来的库。它通过对docx文档模板加载,使用类似jinja2网页模板开发的语法对其进行修改。这个库在功能上很专一,但功能强大,特别是在需要按照固定格式输出文档时,如数据库设计文档等。

安装docxtpl可以通过pip命令pip install docxtpl来完成。

docxtpl是一个方便、灵活的Python库,用于生成和修改Microsoft Word文档。

变量

word">from docxtpl word">import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'name': '张三',  # 普通变量'address': {'province': '山东省', 'city': '青岛市', 'county': '市南区'},  # 字典'height': [30, 50, 150, 180]}  # 列表
tpl.render(context)
tpl.save('gen.docx')

模板

tpl.docx

我叫{{name}},
在{{address.province}}{{address.city}}{{address.county}},
身高{{height|last}}

生成

gen.docx

1

循环

段落

word">from docxtpl word">import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'paragraphs': ["第一段", "第二段", "第三段", "第四段"]}
tpl.render(context)
tpl.save('gen.docx')

模板

{% word">if paragraphs %}
{%p word">for p_tag word">in paragraphs %}
{{ p_tag}}
{%p endfor %}
{% endif %}

1

run

word">from docxtpl word">import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'runs': ["第一个", "第二个", "第三个", "第四个"]}
tpl.render(context)
tpl.save('gen.docx')
{%- word">if runs -%}
{%r word">for r_tag word">in runs %}{{ r_tag}}{%r endfor %}
{%- endif -%}

1

表格行

word">from docxtpl word">import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'trs': ["第一个", "第二个", "第三个", "第四个"]}
tpl.render(context)
tpl.save('gen.docx')

1
1

表格列

word">from datetime word">import datetimeword">from docxtpl word">import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'Company': '一家公司','date': datetime.now().strftime("%d.%m.%Y"),'col_labels': ['产品', '分类', '价格', '库存'],'tbl_contents': [{'label': 'Item 1', 'cols': ['Laptop', 'Electronics', '$900', '50'], 'bg': 'E37222'},{'label': 'Item 2', 'cols': ['T-shirt', 'Apparel', '$15', '200'], 'bg': '07889B'},{'label': 'Item 3', 'cols': ['Coffee Mug', 'Kitchenware', '$8', '150'], 'bg': 'E37222'},{'label': 'Item 4', 'cols': ['Smartphone', 'Electronics', '$700', '100'], 'bg': '07889B'},],
}tpl.render(context)
tpl.save('gen.docx')

1

2

相关链接

https://docxtpl.readthedocs.io/en/latest/


http://www.ppmy.cn/news/1464184.html

相关文章

Tasker+SendSilentMail实现钉钉自动打卡

Tasker 允许用户根据自定义的“配置文件”(Profiles),在特定的“背景”(Contexts)下,执行指定的“任务”(Tasks)。以下是关于Tasker的详细介绍: 强大的自定义能力:用户可以根据自己的需求,创建各种配置文件和任务&…

C 实现 WebSocket 服务器

目录 一、概述 二、基本特征 三、使用案例 1、客户端 HTML 代码 2、服务端 C 代码 四、运行结果 一、概述 实现 WebSocket 服务器主要参考 RFC 协议。链接如下: RFC 6455: The WebSocket Protocol (rfc-editor.org)https://www.rfc-editor.org/rfc/rfc6455.h…

Vue从入门到实战Day07

一、vuex概述 目标:明确vuex是什么,应用场景,优势 1. 是什么: vuex是一个vue的状态管理工具,状态就是数据。 大白话:vuex是一个插件,可以帮助我们管理vue通用的数据(多组件共享的…

typedef 和 using 区别

typedef 和 using 都可以用于定义一个新类型。typedef 用于c语言中&#xff0c;被c继承&#xff0c;目的是为已存在的类型创建一个别名。 typedef 用法 typedef old_type new_type 例如&#xff1a; typedef int Integer; typedef std::vector<int> IntVector; typed…

【放球问题 乘法原理 唯一分解定理】1735. 生成乘积数组的方案数

本文涉及知识点 【组合数学 隔板法 容斥原理】放球问题 乘法原理 唯一分解定理 本题同解 【唯一分解定理】【动态规划】【前缀和】1735生成乘积数组的方案数 LeetCode 1735. 生成乘积数组的方案数 给你一个二维整数数组 queries &#xff0c;其中 queries[i] [ni, ki] 。…

GB报文中的Cseq值的注意点

一、 问题现象 【问题现象】NVR使用GB接三方平台发现倍速回放时&#xff0c; 【现场拓扑】现场拓扑如下 &#xff08;1&#xff09; NVR侧使用家用宽带的方式&#xff0c;通过国标跨公网接入三方平台。 图1.1&#xff1a;网络拓扑 二、 抓包分析 INVITE sip:420000004013200…

Java 读取 xml 文件的五种方式

在编写与 XML 数据交互的现代软件应用时&#xff0c;有效地读取和解析 XML 文件是至关重要的。XML&#xff08;可扩展标记语言&#xff09;因其灵活性和自我描述性&#xff0c;已成为数据存储和传输的一种普遍格式。对于 Java 开发者来说&#xff0c;Java 提供了多种工具和库来…

JavaScript 模板字符串

JavaScript 模板字符串是一种允许在字符串中嵌入表达式的特殊字符串语法。它们以反引号&#xff08;&#xff09;包围&#xff0c;并使用${}符号来表示需要插入的表达式。 模板字符串可以包含任何有效的 JavaScript 表达式&#xff0c;包括变量、函数调用、算术运算等。在插入…