docx について
DOCX 文書の作成、編集、分析を支援するスキルです。docx-js による生成、XML 編集、コンテンツ抽出、コメント、変更履歴、出力検証を扱います。
主な機能
- 01docx-js による文書作成
- 02XML による既存 DOCX の編集
- 03pandoc によるコンテンツ抽出
- 04コメントと変更履歴の追加
- 05文書の検証とレンダリング
活用シーン
- 01DOCX 文書の新規作成
- 02既存文書の修正
- 03文書テキストのレビューや注釈
- 04レンダリング結果とスキーマの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fcakyon/ claude-codex-settings --skill docxインストール後、Claude Code で/docxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.txtscripts/__init__.pyaccept_changes.pycomment.pymerge_runs.pyscripts/office/helpers/__init__.pypptx_chart.pypptx_slide.pypptx_theme.pyscripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsdopc-coreProperties.xsdopc-digSig.xsdopc-relationships.xsdscripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsddml-chartDrawing.xsddml-diagram.xsddml-lockedCanvas.xsddml-main.xsddml-picture.xsddml-spreadsheetDrawing.xsddml-wordprocessingDrawing.xsdpml.xsdshared-additionalCharacteristics.xsdshared-bibliography.xsdshared-commonSimpleTypes.xsdshared-customXmlDataProperties.xsdshared-customXmlSchemaProperties.xsdshared-documentPropertiesCustom.xsdshared-documentPropertiesExtended.xsdshared-documentPropertiesVariantTypes.xsd詳細
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 が内部で幅と高さを入れ替えます。 - 表には幅の指定が 2 か所必要です: 表の
columnWidthsと各セルのwidthを、どちらもWidthType.DXAで設定してください(PERCENTAGEは Google Docs で正しく表示されません)。列幅の合計は表の幅と一致させてください。 - 表の網かけ:
ShadingType.SOLIDは黒く表示されるため、必ずShadingType.CLEARを使用してください。 - リスト:
•を直接挿入しないでください。LevelFormat.BULLETを使ったnumbering設定を使用してください。 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 # then Read the images
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 # strip symlink entries — docx from external parties is untrusted
python scripts/merge_runs.py unpacked/ # coalesce fragmented runs so text is findable
# edit unpacked/word/document.xml in place — do NOT reformat or pretty-print
(cd unpacked && rm -f ../out.docx && zip -Xr ../out.docx .)
python scripts/office/validate.py out.docx --original doc.docx # XSD checks; --auto-repair fixes common issues
# redlining? add --author "<the name you redlined under>" to check every edit is tracked
Word では、テキストが多数の <w:r> ラン(変更履歴 ID、スペルチェックマーカーなど)に分割されるため、ドキュメント上で確認できるフレーズが、XML 内で連続した文字列として存在するとは限りません。merge_runs.py は、コンテンツやレンダリングを変えずに、word/document.xml 内の隣接する書式が同じランを結合します。また、.docx を直接指定することもできます(python scripts/merge_runs.py doc.docx -o merged.docx)。
変更履歴: 変更履歴を記録する場合は、--author "<the name you redlined under>" を指定して検証してください(--original が必要です)。これにより、変更したにもかかわらず <w:ins>/<w:del> で囲まれていないテキストが報告されます。これは誤って発生しやすく、変更を承認した表示では見えません。ランは w:id、w:author、w:date 属性を付けた <w:ins>/<w:del> で囲みます。<w:del> 内のテキスト要素は <w:t> ではなく <w:delText> です。段落記号の削除(<w:pPr><w:rPr><w:del w:id=".." w:author=".." w:date=".."/></w:rPr></w:pPr>)は、「この段落を次の段落に結合する」という意味です。そのため、段落全体を削除するには、これに加えてすべてのランを <w:del> で囲みます。<w:del/> は rPr のほかの子要素より前に置く必要があります。順序はスキーマで定められています。
すべての変更履歴を承認したクリーンなコピーを作成するには、python scripts/accept_changes.py in.docx out.docx を実行します。
削除された段落記号を承認すると、その段落は下の段落に結合されるため、ランがすべて削除された段落は消えます。Word ではそのように処理されますが、accept_changes.py と pandoc --track-changes=accept では常にそうなるとは限りません。どちらも同じように失敗します。削除されたテキストは取り除きますが、空になった段落を残すため、自動採番された段落の場合、余分な空の箇条書きとして表示されます。
pandoc --track-changes=acceptは段落を結合しません。accept_changes.py(LibreOffice)は正しく結合しますが、削除された段落の後に空のスペーサー段落がある場合を除きます。
どちらの表示でも空の箇条書きが表示される場合、それは表示上の問題であり、ドキュメントの欠陥ではありません。段落の削除は XML で確認してください。
コメント
コメントには、相互に関連付けられた 6 つのファイルが必要です。ヘルパーを使用してください。document.xml も編集する場合はディレクトリモード(解凍/再圧縮の手間を省けます)、それ以外の場合は .docx 直接モードを使用します。
# Against an already-unpacked directory (preferred when also placing markers)
python scripts/comment.py unpacked/ "Fees & expenses cap is too low"
python scripts/comment.py unpacked/ "Agreed" --parent 0
# Against a .docx directly
python scripts/comment.py contract.docx "This cap is too low" -o annotated.docx
このスクリプトは、comments.xml、commentsExtended.xml、commentsIds.xml、commentsExtensible.xml、リレーションシップ、コンテンツタイプのオーバーライドを書き込みます。コメント ID は自動で割り当てられます。続いて、コメントを特定のテキストにアンカーするため、word/document.xml に追加する <w:commentRangeStart>/<w:commentRangeEnd>/<w:commentReference> のスニペットを出力します。これらのマーカーを配置するまでは、コメントは存在していても表示されません。
依存関係
docx(npm、プリインストール済み — require('docx') が失敗した場合のみインストール) · pandoc · LibreOffice(soffice) · pdftoppm(Poppler)