name: docx-generator display_name: "Word 文档生成与编辑" description: "需要创建、读取、编辑或处理 Word 文档(.docx / .dotx)时使用。触发词:'Word'、'word 文档'、'.docx'、'生成报告'、'制作合同/简历/方案/说明书'、'提取 word 内容'、'在文档里查找替换'、'给文档加页眉页脚/目录/表格'。也用于把任意内容排版成一份正式的 Word 文件。不要用它处理 PDF、Excel 或无关编程任务。中文创作场景尤其适合:小说大纲稿、投稿文档、合同、简历、工作总结。" license: "MIT(改写自 anthropics/skills docx,已去除私有辅助脚本依赖,改为自包含 python-docx 方案)"
小葱技能7w4.net有更新,你可以访问看下。
.docx 本质是一个 ZIP 包,里面是 XML。按任务选方案:
| 任务 | 方案 |
|---|---|
| 新建 文档 | 用 python-docx(推荐,自包含,见下方模板)或 npm docx 包 |
| 编辑 已有文档 | 解压 → 改 word/document.xml → 重新压缩;或用 python-docx 的 Document('existing.docx') 追加/修改 |
| 读取 内容 | python-docx 的 document.paragraphs 遍历,或对文件跑 pandoc -t markdown file.docx |
本技能根目录下的
references/docx_template.py是一个完整可运行的示例(标题/多级标题/表格/列表/页脚页码),直接用python references/docx_template.py <输出路径>即可生成一份示范文档。
python-docx 已随本技能所需环境预装。模型熟悉 API,下面是高频坑:
from docx.shared import Inches 后用 document = Document() 设置 sections[0].page_width/height(Letter = 12240×15840 EMU,1 英寸=1440 EMU)。table.autofit=True 或给每列 cell.width = Inches(...);列宽之和应等于表格宽。WD_CELL_VERTICAL_ALIGNMENT 与 shading element,不要整体 SOLID(会渲染成黑块)。简单做法是用浅灰 XML:见模板。•,用 document.add_paragraph(text, style='List Bullet') 或 'List Number'。from docx.embedded import Image → paragraph.add_run().add_picture(path, width=Inches(3)),需指定 width/height 之一。from docx.enum.text import WD_BREAK; paragraph.add_break(WD_BREAK.PAGE)。\n 拼多行:每段用独立的 add_paragraph。Heading 1/2/3 样式(在 Word 导航窗格里可见),并在文首放一句"右键→更新域→更新整个目录"的提示,或插入 TOC 域 XML(进阶,见模板注释)。bottom border 画横线。旧版 .doc 先转换:soffice --headless --convert-to docx file.doc(需 LibreOffice)。
from docx import Document
doc = Document('existing.docx')
# 遍历段落
for p in doc.paragraphs:
if '旧词' in p.text:
for run in p.runs:
run.text = run.text.replace('旧词', '新词')
# 追加内容
doc.add_heading('新增章节', level=1)
doc.add_paragraph('新段落')
doc.save('out.docx')
Word 会把同一句话拆成很多 <w:r> run(修订标记、拼写检查),所以"看起来连在一起的短语"在 XML 里可能不是连续字符串——查找替换建议用 run.text 逐个替换,而不是整段正则。
生成 .docx 后,转成 PDF 看一眼排版:
soffice --headless --convert-to pdf output.docx
pdftoppm -jpeg -r 100 output.pdf page
# 然后 Read 生成的 page-*.jpg 检查
python-docx(已预装于本技能环境)· 可选:pandoc · 可选:soffice(LibreOffice,用于转 PDF 验证 / 转 doc)。
Heading 1 当"卷名"、Heading 2 当"章名",Word 里一键生成目录。table.style='Light Grid Accent 1'。section.footer.add_paragraph().add_field('PAGE'))。references/docx_template.py 有可直接跑的样板。质量中等偏上,文档说明详细且实用,踩坑要点很有价值,提供的代码示例基本可用。但文件较少,只有参考模板,缺少完整测试和更多示例,实际使用时可能需要自己调试。总体来说能较好地指导 Word 文档生成任务,但细节上还有完善空间。