docxtpl是一個用于生成Microsoft Word文檔的模板引擎庫。它結合了docx模塊和Jinja2模板引擎,使用戶能夠使用Microsoft Word模板文件并在其中填充動態數據。這個庫提供了一種方便的方式來生成個性化的Word文檔,并支持條件語句、循環語句和變量等控制結構,以滿足不同的文檔生成需求。
docxtpl是基于python-docx和jinja2開發出來的庫。它通過對docx文檔模板加載,使用類似jinja2網頁模板開發的語法對其進行修改。這個庫在功能上很專一,但功能強大,特別是在需要按照固定格式輸出文檔時,如數據庫設計文檔等。
安裝docxtpl可以通過pip命令pip install docxtpl
來完成。
docxtpl是一個方便、靈活的Python庫,用于生成和修改Microsoft Word文檔。
變量
from docxtpl 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
循環
段落
from docxtpl import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'paragraphs': ["第一段", "第二段", "第三段", "第四段"]}
tpl.render(context)
tpl.save('gen.docx')
模板
{% if paragraphs %}
{%p for p_tag in paragraphs %}
{{ p_tag}}
{%p endfor %}
{% endif %}
run
from docxtpl import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'runs': ["第一個", "第二個", "第三個", "第四個"]}
tpl.render(context)
tpl.save('gen.docx')
{%- if runs -%}
{%r for r_tag in runs %}{{ r_tag}}{%r endfor %}
{%- endif -%}
表格行
from docxtpl import DocxTemplatetpl = DocxTemplate('tpl.docx')
context = {'trs': ["第一個", "第二個", "第三個", "第四個"]}
tpl.render(context)
tpl.save('gen.docx')
表格列
from datetime import datetimefrom docxtpl 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')
相關鏈接
https://docxtpl.readthedocs.io/en/latest/