name: docx-generator display_name: "Word 文件生成與編輯" description: "需要建立、讀取、編輯或處理 Word 文件(.docx / .dotx)時使用。觸發詞:'Word'、'word 文件'、'.docx'、'生成報告'、'製作合同/簡歷/方案/說明書'、'提取 word 內容'、'在文件裡查詢替換'、'給文件加頁首頁尾/目錄/表格'。也用於把任意內容排版成一份正式的 Word 檔案。不要用它處理 PDF、Excel 或無關程式設計任務。中文創作場景尤其適合:小說大綱稿、投稿文件、合同、簡歷、工作總結。" license: "MIT(改寫自 anthropics/skills docx,已去除私有輔助指令碼依賴,改為自包含 python-docx 方案)"
.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'))。本技能來自小蔥技能站7w4.net。
references/docx_template.py 有可直接跑的樣板。質量中等偏上,文件說明詳細且實用,踩坑要點很有價值,提供的程式碼示例基本可用。但檔案較少,只有參考模板,缺少完整測試和更多示例,實際使用時可能需要自己除錯。總體來說能較好地指導 Word 文件生成任務,但細節上還有完善空間。