
docx
熱門當使用者想要建立、讀取、編輯或操作 Word 文件(.docx 檔案)或 Word 範本(.dotx 檔案)時,請使用此技能。觸發條件包括:任何提及「Word 文件」、「word document」、「.docx」、「.dotx」,或要求產生具有目錄、標題、頁碼或信頭等格式的專業文件。此外,當需要從 .docx 或 .dotx 檔案中擷取或重新組織內容、在文件中插入或取代圖片、在 Word 檔案中執行尋找與取代、處理追蹤修訂或註解,或將內容轉換為精美的 Word 文件時,也請使用此技能。如果使用者要求以 Word 或 .docx 檔案形式提供「報告」、「備忘錄」、「信件」、「範本」或類似 deliverables,請使用此技能。請勿用於 PDF、試算表、Google 文件,或與文件產生無關的一般程式設計任務。
當使用者想要建立、讀取、編輯或操作 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.xml → zip(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內使用PositionalTab(alignment: PositionalTabAlignment.RIGHT、leader: 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.jpg…page-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:id、w:author、w: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.py 和 pandoc --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.xml、commentsExtended.xml、commentsIds.xml、commentsExtensible.xml、關聯檔案以及內容類型覆寫。註解 ID 會自動指派。接著它會列印 <w:commentRangeStart>/<w:commentRangeEnd>/<w:commentReference> 片段,供您加入 word/document.xml,讓註解錨定到特定文字 — 在您放置這些標記之前,註解存在但不可見。
相依項目
docx(npm,已預先安裝 — 僅在 require('docx') 失敗時安裝)· pandoc · LibreOffice(soffice)· pdftoppm(Poppler)
此技能由 Anthropic 建立與維護。此處僅修改 frontmatter 中繼資料,其餘未經修改;條款請參閱 LICENSE.txt。





