docx

docx

熱門

當使用者想要建立、讀取、編輯或操作 Word 文件(.docx 檔案)或 Word 範本(.dotx 檔案)時,請使用此技能。觸發條件包括:任何提及「Word 文件」、「word document」、「.docx」、「.dotx」,或要求產生具有目錄、標題、頁碼或信頭等格式的專業文件。此外,當需要從 .docx 或 .dotx 檔案中擷取或重新組織內容、在文件中插入或取代圖片、在 Word 檔案中執行尋找與取代、處理追蹤修訂或註解,或將內容轉換為精美的 Word 文件時,也請使用此技能。如果使用者要求以 Word 或 .docx 檔案形式提供「報告」、「備忘錄」、「信件」、「範本」或類似 deliverables,請使用此技能。請勿用於 PDF、試算表、Google 文件,或與文件產生無關的一般程式設計任務。

3.8萬星標
3574分支
更新於 2026/8/29
SKILL.md
唯讀
名稱
docx
描述

當使用者想要建立、讀取、編輯或操作 Word 文件(.docx 檔案)或 Word 範本(.dotx 檔案)時,請使用此技能。觸發條件包括:任何提及「Word 文件」、「word document」、「.docx」、「.dotx」,或要求產生具有目錄、標題、頁碼或信頭等格式的專業文件。此外,當需要從 .docx 或 .dotx 檔案中擷取或重新組織內容、在文件中插入或取代圖片、在 Word 檔案中執行尋找與取代、處理追蹤修訂或註解,或將內容轉換為精美的 Word 文件時,也請使用此技能。如果使用者要求以 Word 或 .docx 檔案形式提供「報告」、「備忘錄」、「信件」、「範本」或類似 deliverables,請使用此技能。請勿用於 PDF、試算表、Google 文件,或與文件產生無關的一般程式設計任務。

DOCX 建立、編輯與分析

.docx 是 XML 檔案的 ZIP 壓縮檔。請依任務選擇方法:

任務 方法
建立新文件 撰寫 docx(npm)腳本 — 請參閱下方注意事項
編輯現有文件 unzip → 編輯 word/document.xmlzip(docx-js 無法開啟現有檔案)
讀取內容 pandoc -t markdown file.docx

以下腳本路徑相對於此技能的目錄。

使用 docx-js 建立 — 注意事項

docx 已預先安裝 — 請勿先執行 npm install;直接撰寫腳本並 require('docx')。僅在 require 失敗時才執行 npm install docx。模型已知 API;以下是常見陷阱:

  • 頁面大小預設為 A4。 若要使用美國信紙,請設定 page: { size: { width: 12240, height: 15840 } }(DXA;1440 = 1 英寸)。
  • 橫向: 傳入直向尺寸並設定 orientation: PageOrientation.LANDSCAPE — docx-js 會在內部交換寬高。
  • 表格需要雙重寬度: 在表格上設定 columnWidths,並在每個儲存格上設定 width,兩者皆使用 WidthType.DXA(PERCENTAGE 在 Google 文件中會失效)。欄寬總和必須等於表格寬度。
  • 表格陰影: 使用 ShadingType.CLEAR,絕不要用 SOLID(會顯示為黑色)。
  • 清單: 切勿直接插入 ;請使用 numbering 設定搭配 LevelFormat.BULLET
  • ImageRun 需要 type:"png""jpg" 等)。
  • PageBreak 必須放在 Paragraph 內。
  • 切勿使用 \n — 請使用獨立的 Paragraph 元素。
  • 目錄: 標題必須使用內建的 HeadingLevel.*;自訂標題樣式需設定 outlineLevel,否則不會顯示。
  • 不要使用表格作為水平線 — 請改用段落的底部邊框。
  • 點線引導 / 同一行靠右對齊:TextRun 內使用 PositionalTabalignment: PositionalTabAlignment.RIGHTleader: PositionalTabLeader.DOT),不要使用字面 . 或空格填充。

驗證輸出

寫入 .docx 後,請將其轉換並檢視:

python scripts/office/soffice.py --headless --convert-to pdf output.docx
pdftoppm -jpeg -r 100 output.pdf page
ls page-*.jpg   # 然後讀取圖片

pdftoppm 會將頁碼補零至頁數寬度(page-01.jpgpage-12.jpg)。

編輯現有文件

舊版 .doc 檔案必須先轉換:python scripts/office/soffice.py --headless --convert-to docx file.doc

unzip -q doc.docx -d unpacked/
find unpacked -type l -delete   # 移除符號連結項目 — 外部來源的 docx 不可信
python scripts/merge_runs.py unpacked/   # 合併分散的 runs,讓文字可被搜尋
# 就地編輯 unpacked/word/document.xml — 請勿重新格式化或美化
(cd unpacked && rm -f ../out.docx && zip -Xr ../out.docx .)
python scripts/office/validate.py out.docx --original doc.docx   # XSD 檢查;--auto-repair 可修復常見問題
# 需要標記修訂?加上 --author "<the name you redlined under>" 以檢查每個編輯都有追蹤

Word 會將文字分散在多個 <w:r> runs(修訂 ID、拼字檢查標記),因此您在文件中看到的片語通常不會以連續字串存在於 XML 中。merge_runs.py 會合併 word/document.xml 中相鄰且格式相同的 runs,而不會變更內容或呈現;它也接受 .docx 直接作為參數(python scripts/merge_runs.py doc.docx -o merged.docx)。

追蹤修訂: 標記修訂時,請使用 --author "<the name you redlined under>"(需要 --original)驗證 — 它會回報您變更但未以 <w:ins>/<w:del> 包圍的文字,這很容易不小心發生,且在接受檢視中不可見。將 runs 包在 <w:ins>/<w:del> 中,並加上 w:idw:authorw:date 屬性。在 <w:del> 內,文字元素是 <w:delText>,而非 <w:t>。刪除段落標記(<w:pPr><w:rPr><w:del w:id=".." w:author=".." w:date=".."/></w:rPr></w:pPr>)表示「將此段落合併至下一段」— 因此完全刪除段落等於加上此標記並在每個 run 外圍加上 <w:del><w:del/> 必須位於 rPr 的其他子元素之前;其順序由 schema 強制規定。

若要產生接受所有追蹤修訂的乾淨副本:python scripts/accept_changes.py in.docx out.docx

接受刪除的段落標記應將該段落與其下方的段落合併,因此所有 runs 都被刪除的段落會消失。Word 會這樣做;accept_changes.pypandoc --track-changes=accept 則不一定。兩者失敗方式相同 — 它們會移除刪除的文字,但留下空的段落,當段落是自動編號時,會顯示為多餘的空項目符號:

  • pandoc --track-changes=accept 永遠不會合併段落。
  • accept_changes.py(LibreOffice)會正確合併,除非刪除的段落後面接著空的間隔段落。

在任何檢視中出現空項目符號都是該檢視的產物,而非文件缺陷。請在 XML 中檢查段落刪除。

註解

註解需要六個相互關聯的檔案。請使用輔助工具 — 當您也要編輯 document.xml 時使用目錄模式(可節省一次 unzip/rezip 循環),否則使用 .docx 直接模式:

# 針對已解壓縮的目錄(在同時放置標記時較佳)
python scripts/comment.py unpacked/ "Fees & expenses cap is too low"
python scripts/comment.py unpacked/ "Agreed" --parent 0

# 直接針對 .docx
python scripts/comment.py contract.docx "This cap is too low" -o annotated.docx

此腳本會寫入 comments.xmlcommentsExtended.xmlcommentsIds.xmlcommentsExtensible.xml、關聯檔案以及內容類型覆寫。註解 ID 會自動指派。接著它會列印 <w:commentRangeStart>/<w:commentRangeEnd>/<w:commentReference> 片段,供您加入 word/document.xml,讓註解錨定到特定文字 — 在您放置這些標記之前,註解存在但不可見。

相依項目

docx(npm,已預先安裝 — 僅在 require('docx') 失敗時安裝)· pandoc · LibreOffice(soffice)· pdftoppm(Poppler)


此技能由 Anthropic 建立與維護。此處僅修改 frontmatter 中繼資料,其餘未經修改;條款請參閱 LICENSE.txt。