Communitygithub.com

V4TIME/V4SKILL

Word .docx ファイルの作成、読み取り、編集、テンプレート処理、レビューを行います。

V4SKILL とは?

このスキルは、python-docx ライブラリを利用した小さなCLIツール群を通じて、Microsoft Word の `.docx` ファイルをプログラムで操作するための機能を提供します。テキスト、スタイル、リスト、表、画像、ヘッダー/フッター、`{{token}}` テンプレート、変更履歴(一覧表示/承認/却下)、コメント(一覧表示/追加/削除)、目次やページ番号フィールドの挿入、そしてパッケージのヘルスチェックまで幅広くカバーします。主に Claude Code, Cursor, Codex などのAIエージェント環境での使用を想定しており、ユーザーの要求に応じて動的に Word 文書を生成・編集する際に役立ちます。スクリプトは全て `scripts/` ディレクトリに配置され、ターミナルから実行可能で、各コマンドは `--help` オプションで詳細を確認でき、結果は JSON 形式で標準出力に出力されます。このスキル自体は文書のレンダリングを行わず(PDF 変換には別途 LibreOffice が必要)、レガシーな `.doc` 形式もサポートしません。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/V4TIME/V4SKILL/tree/HEAD/productivity/docx

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Docx スキル

Microsoft Word の .docx ファイルを作成、読み取り、編集、テンプレート処理するためのスキルです。 python-docx を利用した小さなCLIツール群で動作します。テキスト、スタイル、リスト、表、画像、ヘッダー/フッター、{{token}} テンプレート、変更履歴(一覧表示/承認/却下)、コメント(一覧表示/追加/削除)、目次(TOC)とページ番号フィールド、そしてパッケージのヘルスチェックを処理できます。 文書自体のレンダリングは行いません(PDF 変換には LibreOffice が必要です — 「PDF への変換」を参照)、またレガシーな .doc ファイルの編集はサポートしていません。

使用する場合

  • ユーザーが Word 文書(レポート、手紙、契約書など)の生成を依頼した場合。
  • .docx ファイルのテキスト、アウトライン、スタイル、埋め込み画像を取得する必要がある場合。
  • 既存の .docx ファイルを変更する必要がある場合:テキストの置換、表セルの編集、段落の挿入/削除、スタイルの適用、断片化されたランの結合など。
  • {{placeholders}} を含む .docx テンプレートをデータで埋める必要がある場合。
  • 文書に変更履歴が含まれており、それをレビュー、承認、または却下する必要がある場合。
  • レビューアのコメントを読んだり、コメントを追加/削除する必要がある場合。
  • .docx ファイルが開かない、または正常に動作しない場合に破損の診断を行う必要がある場合。
  • 文書に目次や「X / Y ページ」フッターが必要な場合。
  • 対象外:.doc(レガシー)、.odt、または WYSIWYG レイアウト作業。

前提条件

  • Python 3.10 以上、および python-docx がインストールされていること: pip install python-docx(インポート名は docx です。lxml は同梱されています)。
  • コメントの add 機能は、python-docx 1.2 以上ではネイティブAPIを、それ以前のバージョンでは XML フォールバックを使用します — どちらも自動的に処理されます。
  • 画像ブロックを使用する場合:画像ファイル(PNG/JPEG)がローカルに存在している必要があります。

実行方法

すべてのヘルパースクリプトはこのファイルと同じディレクトリの scripts/ にあります。terminal ツールを使って実行します。各スクリプトは --help をサポートし、JSON を標準出力に出力します。

python scripts/docx_create.py spec.json out.docx
python scripts/docx_read.py out.docx --text
python scripts/docx_edit.py replace out.docx --find old --replace new
python scripts/docx_template.py tpl.docx values.json filled.docx
python scripts/docx_revisions.py list out.docx
python scripts/docx_comments.py list out.docx
python scripts/docx_validate.py out.docx

クイックリファレンス

タスクコマンド
JSON 仕様から作成docx_create.py spec.json out.docx
全文テキスト取得(本文+表+ヘッダー/フッター)docx_read.py f.docx --text
見出しアウトラインと表の構造docx_read.py f.docx --structure
実際に使用されているスタイルdocx_read.py f.docx --styles
埋め込まれた画像を抽出docx_read.py f.docx --images outdir/
変更履歴/コメントの検出docx_read.py f.docx --revisions
検索/置換(書式を維持)docx_edit.py replace f.docx --find A --replace B -o out.docx
表セルの値を設定docx_edit.py set-cell f.docx --table 0 --row 1 --col 2 --text X
インデックス N の前に段落を挿入docx_edit.py insert f.docx --index N --text X --style Normal
段落 N を削除docx_edit.py delete f.docx --index N
段落 N にスタイルを適用docx_edit.py style f.docx --index N --style "Heading 1"
隣接する同じ書式のランを結合docx_edit.py normalize f.docx -o out.docx
段落 N の前に TOC フィールドを挿入docx_edit.py toc f.docx --index N -o out.docx
「X / Y ページ」フッターフィールドdocx_edit.py page-numbers f.docx
{{tokens}} を埋めるdocx_template.py tpl.docx values.json out.docx --strict
変更履歴の一覧表示(ID/作者/日付/テキスト)docx_revisions.py list f.docx
すべての変更履歴を承認/却下docx_revisions.py accept-all f.docx -o out.docx(または reject-all)
1つの変更履歴を承認/却下docx_revisions.py accept f.docx --id 3 -o out.docx
コメントの一覧表示(+アンカーテキスト)docx_comments.py list f.docx
テキストにアンカーされたコメントを追加docx_comments.py add f.docx --target "phrase" --text "note" --author You
ID 指定でコメントを削除docx_comments.py delete f.docx --id 0
パッケージのヘルスチェックdocx_validate.py f.docx(エラー時は exit 1)

手順

  1. 作成。 JSON 仕様ファイルを write_file で作成し、scripts/docx_create.py を実行します。仕様は以下をサポートします:page(サイズ + ミリ単位の余白)、header/footer 文字列、footer_page_numbers(「X / Y ページ」フッターフィールドを追加)、styles(フォント、サイズ、太字/斜体、16進数 color を指定可能なカスタム段落スタイル)、そして blocks — heading(レベル 1-9)、paragraph(text または各ランが bold/italic/underline を設定可能な runs リスト)、bullet_list、numbered_list、table(header 行は太字で表示、rows、オプションの組み込みテーブル style(例:Table Grid))、image(path、オプションの width_mm)、toc(目次フィールド)、page_break。完全な仕様形式は scripts/docx_create.py の先頭に文書化されています。
  2. 読み取り。 scripts/docx_read.py を、正確に1つのモードフラグを指定して使用します。--text は本文段落、すべての表セルのテキスト、ヘッダー/フッターテキストを JSON として返します。--structure は見出しアウトラインと段落/表/セクションの数を返します。--images DIR はパッケージ内の word/media/ 以下のすべてのファイルを指定ディレクトリにコピーします。
  3. 編集。 scripts/docx_edit.py を使用します。replace は本文、表(入れ子含む)、ヘッダー、フッターを走査し、ラン書式を保持します。--body-only を追加するとヘッダー/フッターをスキップします。-o out.docx を指定すると元のファイルを保持し、省略するとその場で編集します。insert/delete/style/toc の段落インデックスは、--structure/--text の本文順序を参照します。最初に normalize を実行すると、Word での激しい編集を経た文書の隣接する同一書式のランを結合し、後の検索/置換が確実に一致するようになります。
  4. 変更履歴のレビュー。 docx_revisions.py list は、本文、表、ヘッダー、フッター内のすべての w:ins と w:del(ID、作者、日付、影響を受けるテキスト)を報告します。accept-all / reject-all で一括解決、accept/reject --id N で単一の変更を処理します。承認は挿入を保持し削除テキストを削除、却下はその逆を行います。
  5. コメント。 docx_comments.py list は各コメントの ID、作者、日付、本文テキスト、およびそれがアンカーされている文書テキストを返します。add --target "some phrase" は、指定されたフレーズの最初の出現箇所に新しいコメントをアンカーします(必要に応じてランが分割され、書式は保持されます)。delete --id N は文書テキストに触れることなくコメントとそのマーカーを削除します。
  6. テンプレート。 文書内に {{name}} 形式のトークンを配置します。scripts/docx_template.py を、値の JSON オブジェクトと共に実行します。--strict を使用すると、未埋めのトークンが残っている場合にエラーで終了します。JSON 出力は、いずれの場合も filled カウントと unfilled_tokens をリストします。
  7. 検証(常に実行):出力を --text または --structure で再読み取りし、変更履歴/コメント操作を行った場合は docx_validate.py を実行します。

PDF への変換

専用のスクリプトは不要です。LibreOffice がインストールされている場合、ヘッドレスで変換します:

soffice --headless --convert-to pdf --outdir outdir/ file.docx

事前に利用可能性を確認してください(command -v soffice || command -v libreoffice)。どちらも存在しない場合は、ユーザーにこの環境では PDF 変換が利用できないことを伝えてください — python-docx は PDF をレンダリングできず、レイアウトの忠実性には実際のレンダラーが必要です。

注意点

  • トークンが複数のランに分割されている。 Word はテキストを複数のランに断片化することがよくあります。置換ヘルパーは一致したランを結合します(置換テキストは最初のランの書式を継承します)。最初に docx_edit.py normalize を実行すると、その後のすべての編集での断片化を軽減できます。
  • 変更履歴のカバレッジ。 docx_revisions.py はラン単位の挿入と削除(圧倒的多数)を解決します。段落マークや表行の変更、書式変更レコード、移動は --revisions で検出されますが、自動解決はされません — references/revisions-and-comments.md を参照し、それらは Word に委ねてください。
  • コメントのスレッド化。 返信や「解決済み」ステータスは commentsExtended.xml に保存され、このスキルはこれを無視します。追加されるコメントはフラットなトップレベルコメントです。
  • フィールド結果は Word によって計算される。 toc、page-numbers、および仕様オプションの toc/footer_page_numbers は フィールドコード を書き込みます。実際のエントリと番号は、ファイルが開かれたときに Word/LibreOffice が設定します(Word はフィールドを更新するよう促す場合があります)。python-docx が計算することはないため、その間はプレースホルダテキストが表示されます。
  • 検証はヘルスチェックであり、スキーマ検証ではない。 docx_validate.py は ZIP、必要なパーツ、リレーションシップターゲット、画像のマジックバイト、参照スタイルを検証します。これは XSD 検証ではありません — 合格しても Word が好まない XML が含まれている可能性があります。
  • スタイル名は存在している必要がある。 文書内で定義されていないスタイルを適用すると KeyError が発生します。Heading 1、List Bullet、List Number、Table Grid などの組み込みスタイルはデフォルトテンプレートに存在します。カスタムスタイルは最初に作成仕様で宣言する必要があります。
  • 番号付きリストはリセットされる。 List Number は Word のデフォルトの番号付けに依存します。1つの文書内の別々のリストは、番号をリセットせずに継続する場合があります。正確な複数リストの番号付けが必要なユーザーには警告してください。
  • セル書き込みは書式を置き換える。 set-cell は cell.text = ... を使用するため、そのセルのランはプレーンな書式にリセットされます。
  • エンコーディング。 すべての JSON 仕様/値ファイルは明示的に UTF-8 として読み取られます。独自のグルーコードを書く場合は、ロケールのデフォルトに決して依存しないでください。
  • XML を unzip して sed で編集しないでください。 スクリプト(または python-docx)を通じて編集してください。document.xml での生のテキスト置換はファイルを簡単に破損させます。patch/write_file は JSON 入力に対してのみ使用し、.docx ファイル自体には決して使用しないでください。

検証

  • 作成/編集/テンプレート後、docx_read.py out.docx --text を実行し、期待される文字列が出現し(古い文字列が消えている)ことを確認します。
  • 承認/却下後、docx_revisions.py list は [] を返すか(意図的に残した ID のみ)になるはずです。コメント操作後、docx_comments.py list は変更を反映し、--text 出力は変更されていない必要があります。
  • docx_validate.py out.docx は正常なパッケージの場合、exit 0 で "ok": true を返します — 変更履歴/コメント/フィールド操作の後は必ず実行してください。
  • テンプレートは --strict で実行するか、unfilled_tokens == [] を確認します。
  • 構造チェック:--structure は期待される見出しアウトラインと表の形状を表示し、--styles はカスタムスタイルが適用されたことを確認します。

Individual skills in this repo

This repo contains 12 individual skills — each has its own dedicated page.

関連スキル