/install docxtpl
docxtpl Skill
Use a .docx file as a Jinja2 template, then fill it with Python data at runtime.
Installation
pip install docxtpl
# For subdocuments support:
pip install "docxtpl[subdoc]"
Quick Start
from docxtpl import DocxTemplate
doc = DocxTemplate("my_template.docx")
context = {"name": "Alice", "department": "Cardiology"}
doc.render(context)
doc.save("output.docx")
Workflow:
- Design a
.docxin Word with Jinja2 tags ({{ var }},{%p if ... %}) - Load the template with
DocxTemplate(path) - Build a Python context dict
- Call
doc.render(context)thendoc.save(path)
Tag Reference
| Tag | Scope | Purpose |
|---|---|---|
{{ var }} |
inline string | Display a variable |
{{r var }} |
inline styled | Display a RichText object |
{%p ... %} |
paragraph | Control full paragraphs (if/for) |
{%tr ... %} |
table row | Control table rows |
{%tc ... %} |
table column | Control table columns |
{%r ... %} |
run | Control styled runs |
{%p if cond %} / {%p endif %} |
paragraph | Conditional paragraph |
{%p for x in list %} / {%p endfor %} |
paragraph | Loop over paragraphs |
{% colspan N %} |
table cell | Horizontal cell spanning |
{% hm %} |
table cell | Horizontal merge in for-loop |
{% vm %} |
table cell | Vertical merge in for-loop |
{% cellbg color %} |
table cell | Set cell background color |
{ #p comment #} |
paragraph | Comment |
{%- -%} |
text merge | Merge split lines |
{ _%, %_ }, { _{, }_ } |
escape | Display literal {%, %}, {{, }} |
Important: Always put spaces around delimiters: {{ var }} not {{var}}.
CLI Usage
python -m docxtpl template.docx data.json output.docx
python -m docxtpl -o template.docx data.json output.docx # overwrite
Key Classes
DocxTemplate(path)— Load a.docxtemplate. Methods:.render(context),.save(path),.get_undeclared_template_variables(context=None)RichText(text, ...)/R(text)— Styled text with.add()for multi-style concatenationInlineImage(tpl, img_path, width, height)— Dynamic image insertion (useMm(),Inches(), orPt()for dimensions)Listing(text)— Escaped text preserving\/\a/\fwithout losing styleRichTextParagraph()/RP()— Paragraph-level properties (use with{{p var }})Subdoc—tpl.new_subdoc(path)to merge existing.docxfiles
Media Replacement
For headers/footers where dynamic tags aren't supported:
tpl.replace_pic("dummy.jpg", "real.jpg") # pictures
tpl.replace_media("dummy.mp3", "real.mp3") # any media
tpl.replace_embedded("dummy.docx", "real.docx") # embedded docs
tpl.replace_zipname("path/in/zip.xlsx", "real.xlsx") # raw zip entry
Escaping
By default, no auto-escaping. Use one of:
RichTextfor safe content{{ var|e }}in templateescape("text")in Python contexttpl.render(context, autoescape=True)
Tips
\→ newline,\a→ new paragraph,→ tab,\f→ page break (in strings andRichText)- To render a template multiple times, call
tpl.reset_replacements()before eachrender()if using media replacements - Pass a custom
jinja_envtorender()for custom Jinja2 filters - Preview
get_undeclared_template_variables()to warn about missing keys
📖 Full API reference: references/official-docs.md
CLI Scripts
Convenience scripts in scripts/ (use {baseDir}/scripts/ path):
# Render with inline key=value pairs
python scripts/docxtpl-render.py template.docx out.docx name="Alice" age="30"
# Render from JSON file
python scripts/docxtpl-render-json.py template.docx data.json out.docx
# Render from JSON string
python scripts/docxtpl-render.py template.docx out.docx --json '{"name":"Bob"}'
# List missing template variables
python scripts/docxtpl-list-vars.py template.docx
# Batch render from CSV (one .docx per row, named by id column)
python scripts/docxtpl-render-batch.py patients.csv ./reports/ template.docx \
--id-column patient_id --suffix _report --summary
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install docxtpl - 安装完成后,直接呼叫该 Skill 的名称或使用
/docxtpl触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Docxtpl 是什么?
Generate Word (.docx) documents from Jinja2 templates. Uses python-docx (read/write) + Jinja2 (template engine). Design templates in Microsoft Word, then pop... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 33 次。
如何安装 Docxtpl?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install docxtpl」即可一键安装,无需额外配置。
Docxtpl 是免费的吗?
是的,Docxtpl 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Docxtpl 支持哪些平台?
Docxtpl 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Docxtpl?
由 KGTAF(@killgfat)开发并维护,当前版本 v0.0.1。