kai-docx-generator

Generate professional .docx documents from Markdown text or fill data into .docx templates. Use when: converting markdown to Word, generating reports/contracts/proposals as .docx, filling template variables in Word documents, validating .docx structure. Triggers: "生成word", "转成docx", "markdown转word", "生成文档", "填充模板", "fill template", "generate docx", "convert markdown to word".

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "kai-docx-generator" with this command: npx skills add kaisersong/kai-docx-generator

kai-docx-generator

Generate professional .docx documents from Markdown, or fill data into .docx templates.

Core Principles

  1. Zero Fabrication — Never invent content. If data is missing, use placeholder text ([待填写]) or ask the user.
  2. Template Filling is XML-level{{variable_name}} patterns are matched at the w:t XML node level inside the .docx. Values are sanitized to escape & < > " ' and remove control characters.
  3. Security: Path Validation — Image paths must be relative or within the current working directory. Absolute paths (e.g. /tmp/...) and path traversal (..) are rejected.
  4. Auto-Truncation — Exceeding input limits (200KB, 20 images, 50 table rows, 20 table columns) triggers automatic truncation without error.
  5. Template Strictness--strict mode on fill_template.py returns exit code 1 when any placeholder remains unreplaced, enabling CI/CD gate usage.

Commands

CommandWhat it does
python3 <skill-path>/scripts/generate.py <input.md> <output.docx>Convert Markdown to .docx
python3 <skill-path>/scripts/generate.py --style <style> <input.md> <output.docx>Convert with a specific style
`python3 <skill-path>/scripts/fill_template.py --data <data.jsonfrontmatter.md> --output <out.docx> <template.docx>`
python3 <skill-path>/scripts/fill_template.py --strict --data <data.json> --output <out.docx> <template.docx>Fill template, fail if placeholders remain
python3 <skill-path>/scripts/validate.py <file.docx>Validate .docx file structure

Markdown → .docx

python3 <skill-path>/scripts/generate.py input.md output.docx
python3 <skill-path>/scripts/generate.py --style report input.md output.docx

Content-Type → Style Routing

When no --style is specified, recommend a style based on topic keywords:

Topic keywordsRecommended styleUse case
合同、协议、条款、contract, agreementcontractContracts & legal documents
报告、分析、数据、KPI、report, analysis, dashboardreportBusiness reports (blue headers)
会议纪要、meeting minutes, 讨论meetingMeeting minutes (compact layout)
红头文件、通知、通报、dispatch, official noticedispatchOfficial dispatchs (red header)
技术、API、架构、代码、spec, architecturetech_specTechnical specs (monospace body)
公函、商务信、letterbusiness_letterBusiness letters
公告、公告通知、notice, announcementnoticeOfficial notices (large bold text)
其他 / generalstandardGeneral documents

When routing, announce: "推荐使用 [style] 样式 ([description]),可用 --style 覆盖。"

Default Output Filename

If the user does not specify an output filename, derive it from the input file:

  • <input>.md<input>.docx (same basename, replace extension)
  • For generated content (no input file), use: doc-<YYYY-MM-DD>-<slug>.docx
  • Slug rule: lowercase the title/topic, replace spaces and non-ASCII with hyphens, keep only alphanumeric ASCII and hyphens, max 30 chars.

Supported Markdown Features

FeatureSyntax
Headings (H1-H3)#, ##, ###
ParagraphsText blocks
Bold / Italic**bold**, *italic*
Bullet / Numbered lists-, 1.
TablesStandard GFM tables
Code blocksTriple backticks, with optional language
Blockquotes (callout)> text → info box
Images![caption](path)
Page break<!-- pagebreak -->
Horizontal rule---
YAML front matter---\ntitle: ...\n---

Style Presets

StyleUse case
standard (default)General documents
contractContracts & agreements (formal, 12pt)
reportBusiness reports (blue headers, 10.5pt)
meetingMeeting minutes (compact, 10.5pt)
business_letterBusiness letters (traditional format)
tech_specTechnical specifications (monospace, dark theme)
dispatchOfficial dispatchs / 红头文件 (red header)
noticeOfficial notices (bold, 14pt)

YAML Front Matter

---
title: Document Title          # 写入 docx core_properties.title
author: Author Name            # 写入 docx core_properties.author
date: 2026-04-10               # 写入 docx core_properties.created
lang: zh                       # 可选: zh | en, 影响默认文本
header:
  text: CONFIDENTIAL           # 页眉文字
  alignment: center            # left | center | right
footer:
  page_number: true            # 显示页码
toc:
  max_level: 3                 # TOC 包含的最大标题级别 (1-3)
---

All fields are optional. title, author, and date are written to the .docx core properties (visible in Word → File → Info).

Template Filling

# With JSON data
python3 <skill-path>/scripts/fill_template.py --data data.json --output output.docx template.docx

# With Markdown front matter as data
python3 <skill-path>/scripts/fill_template.py --data frontmatter.md --output output.docx template.docx

# Strict mode: fail if any placeholder remains unreplaced
python3 <skill-path>/scripts/fill_template.py --strict --data data.json --output output.docx template.docx

Data format (JSON):

{
  "company_name": "Acme Corp",
  "amount": "¥1,000,000",
  "date": "2026-04-10"
}

Template placeholders are {{variable_name}} patterns in the .docx text (matched at w:t XML node level). Values are automatically sanitized to escape XML special characters and remove control characters. Long values are truncated to prevent layout breakage.

--strict Mode

When --strict is passed, the script exits with code 1 if any {{placeholder}} remains unreplaced after filling. This enables CI/CD gating: all placeholders must have corresponding data keys.

Input Limits

  • Markdown size: 200KB max
  • Images: 20 max
  • Table rows: 50 max
  • Table columns: 20 max

Exceeding limits triggers automatic truncation with no error.

QA Process

After generating a .docx, run these checks:

Automated checks (run validate.py on the output):

  1. File is valid ZIP with required structure (word/document.xml, [Content_Types].xml, word/_rels/document.xml.rels)
  2. XML is parseable (no malformed tags)
  3. File size is reasonable (> 50KB warning, > 50MB warning)
  4. No unreplaced {{placeholders}} detected

Visual checks (open in Word/WPS): 5. Style conformance — headings use the correct style preset colors and fonts (see references/style-presets.md for exact values) 6. Spacing — callouts have proper spacing from surrounding elements 7. Tables — column widths are reasonable, no emoji overlap 8. Code blocks — monospace font + gray background rendering 9. TOC — if requested, TOC field code is present (requires Word to update fields) 10. Images — embedded images render at correct size, no broken links

Template filling checks: 11. All {{placeholders}} with matching data keys are replaced 12. No XML corruption — the output opens without error 13. Long values are truncated appropriately (no layout breakage)

Use --validate flag with generate.py to run automated checks automatically after generation.

Works with

  • kai-report-creator — generate .docx reports from markdown output
  • Any Markdown content (reports, specs, meeting notes, contracts)
  • Existing .docx templates with {{placeholder}} variables

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

龙虾船长

龙虾船长 - 零玩家游戏,AI 扮演大航海时代商船船长,自主观察行情、低买高卖、扬帆远航

Registry SourceRecently Updated
General

ms-speech-synth

将长文本(最多数千字)使用微软 Edge TTS 分段合成 MP3/WAV 音频。支持单文件和文件夹批量模式,自动降速防限流(可配置 20-30次/分钟),自动清洗 Markdown 格式转为自然朗读,并可选添加背景音乐(片头/片尾纯背景音)。

Registry SourceRecently Updated
General

Operator Dashboard

Zero‑config OpenClaw gateway monitoring. Runs health checks, sends daily 5‑line summaries, alerts immediately on critical issues (gateway down, cron failures...

Registry SourceRecently Updated
General

微信智能聊天(MBTI版)

微信聊天窗口自动监控、翻译和智能回复工具,集成 Qwen 大语言模型和百度翻译 API。

Registry SourceRecently Updated