officecli-docx について
officecli-docxは、officecliを使ったDOCXの作成、確認、編集をエージェントに案内するスキルです。CLIヘルプの参照、変更の段階的な実行、構成・テキスト・HTML出力による品質確認を重視します。
主な機能
- 01DOCXの内容と構成の作成・編集
- 02セマンティックパスによる要素の読み取りと変更
- 03クエリやビューによる文書の確認
- 04階層とタイポグラフィの指針
- 05変更を段階的に適用して検証
活用シーン
- 01明確な書式のレポートを一から作成
- 02既存のDOCXファイルを確認・編集
- 03空段落、書式の問題、代替テキストの欠落を検出
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ iofficeai/ officecli --skill officecli-docxインストール後、Claude Code で/officecli-docxを入力して読み込まれたか確認します。
詳細
OfficeCLI DOCX スキル
セットアップ
officecli が見つからない場合:
- macOS / Linux:
curl -fsSL https://d.officecli.ai/install.sh | bash - Windows(PowerShell):
irm https://d.officecli.ai/install.ps1 | iex
officecli --version で確認します(PATH に反映されていない場合は、新しいターミナルを開いてください)。インストールに失敗した場合は、https://github.com/iOfficeAI/OfficeCLI/releases からバイナリをダウンロードしてください。
⚠️ ヘルプを先に確認するルール
このスキルでは、適切な docx の姿を説明しますが、すべてのコマンドフラグを網羅するわけではありません。プロパティ名、列挙値、エイリアスが不確かな場合は、推測する前にヘルプを確認してください。
officecli help docx # List all docx elements
officecli help docx <element> # Full element schema (e.g. paragraph, field, numbering, watermark, toc)
officecli help docx <verb> <element> # Verb-scoped (e.g. add field, set section)
officecli help docx <element> --json # Machine-readable schema
ヘルプはインストール済み CLI のバージョンに固定されています。このスキルの説明とヘルプが異なる場合は、ヘルプが正です。
基本的な考え方
.docx は XML パーツ(document.xml、styles.xml、numbering.xml、header*.xml、footer*.xml、comments.xml、…)をまとめた ZIP です。ユーザーに表示されるもの、つまり見出し、表、ページ番号、目次、変更履歴はすべて、その ZIP 内の XML です。officecli はその上にセマンティックパス API(/body/p[1]/r[2])を提供するため、生の XML に触れることはほとんどありません。必要な場合は raw-set を使ってください(XML の付録を参照)。
シェルと実行時のルール
docx のパスには [] が含まれ、プロパティ値には $ が含まれることがあります。どちらもシェルのメタ文字です。エスケープは 3 つのレイヤーで行われます。それぞれを混同しないでください。
- シェル。 要素パスは必ず引用符で囲みます。
/body/p[1]ではなく"/body/p[1]"とします(zsh/bash の glob[N])。$を含む値はシングルクォートで囲みます。--prop text='$50M'のように、長さにかかわらず値全体を一組のシングルクォートで囲みます。クォートなしの$50MはMに切り詰められます。長い文字列の中で'…$var…'と"…$50…"を混在させると、$50が気付かないうちに消えてしまいます。 - CLI(
text=)。 2 文字のエスケープ\n、\v、\tは--prop text=で解釈されます(pptx と同じルールです)。\nは新しい段落を開始します(各新しい<w:p>は元の段落のスタイルを継承します)。\vは 1 つの段落内のソフト改行(<w:br/>)、\tは<w:tab/>になります。バックスラッシュを 2 つ重ねる(\\n)と、バックスラッシュと n を文字どおりに入力できます(通常は必要ありません)。行レベルの表ショートカットc1…cNは例外です。この場合、\nはセル内の<w:br/>改行になります(レシピ(e)を参照)。 - JSON(一括処理)。 一括処理では 2 文字のエスケープは解釈されません。JSON の
"\\n"または"\\v"は文字どおりのテキストとして扱われます。実際の文字を入力するには JSON エスケープを使います。"\n"(改行)は新しい段落を開始し、"\u000b"はソフト改行になります。
不明な場合は、書き込み後に view text を実行し、文字単位で比較してください。
段階的な実行。 officecli は呼び出しごとにファイルを変更します。コマンドは 1 つずつ実行し、毎回終了コードを確認してください。50 コマンドのスクリプトが 3 番目のコマンドで失敗すると、その後の処理も気付かないうちに連鎖して失敗します。構造を変更する操作(新しいスタイル、表、目次、セクション区切り)の後は、さらに作業を重ねる前に get で確認してください。
オープン/保存のライフサイクル: 最初に officecli open <file> を実行し、最後に officecli save <file> を実行してディスクに書き込みます。save は書き込みのみを行い、後続の編集に備えて常駐状態を維持します。常駐状態を解放する必要があるのは、一度だけの引き渡しの場合に限り、officecli close <file> を使ってください。どちらも常に安全に使えます(エラーになったり、作業内容が失われたりすることはありません)。同じスタイルの段落が多い場合は、batch を使います(配列全体を一度に処理します)。書き込み内容を反映するのは officecli 以外との境界だけです。 officecli 自身の読み取りでは、編集内容が常に反映されています。save/close を実行するのは、python-docx、Word、レンダラー、納品処理など、officecli 以外のプログラムがファイルを読み取る前だけにしてください。
$FILE の規則。 すべてのコマンドで "$FILE" を使います。最初に一度だけ FILE="your-doc.docx" と設定してください。出力に doc.docx/review.docx という文字列をそのままコピーしないでください。必ず実際の対象ファイルに置き換えてください。
出力物の要件
すべてのドキュメントが満たすべき成果物の基準です。コマンドを使う前に確認してください。
明確な階層構造。 自明でないドキュメントはすべて、スタイルのない Normal 段落が並んだ状態ではなく、タイトル → 見出し 1 → 見出し 2 → 本文 の構造を持つ必要があります。view outline の結果が 1 つのフラットなリストだけであれば、階層が欠けています。
見出しサイズの明示(Word の既定のスタイルサイズはテンプレートごとにずれがあります):見出し 1 は 18pt 以上(長文のレポートは 20pt)、見出し 2 は 14pt 太字、見出し 3 は 12pt 太字、本文は 11〜12pt、行間は 1.15〜1.5 倍。インラインでサイズを指定するより style=Heading1 を優先してください。そうすれば、テーマを変更するときに定義を 1 箇所変えるだけで済みます。ただし、テンプレートのスタイルを信頼できない場合は、サイズを明示的に設定してください。
本文フォントは 1 種類、アクセントカラーも 1 色。 読みやすい本文フォントを 1 つ(Calibri、Cambria、Georgia、Times New Roman など)使用します。アクセントカラーは見出しの強調や表のヘッダーに使い、多色の装飾は避けてください。
間隔はプロパティで設定。 段落の前後の間隔には spaceBefore / spaceAfter を使用してください。空の段落を並べると改ページが崩れ、view issues で指摘されます。
欧文組版の品質。 新しく入力する内容では、ASCII の引用符ではなくカーリー引用符(' ' " ")を使用します。Unicode の文字をそのまま入力するか、raw-set 内で XML エンティティ(‘/’/“/”)を使用してください。範囲にはエンダッシュ –(2024–2026)、挿入句の区切りにはエムダッシュ — を使います。
1 ページを超えるドキュメントにはヘッダー、フッター、ページ番号を付ける。 ページ番号は、リテラルの文字列「Page 1」ではなく、ライブの PAGE フィールド(--prop field=page)を使ってください。CLI が <w:fldChar> を挿入します(ヘッダーとフッターの節を参照)。
既存のテンプレートを維持する。 既に体裁が定まったファイルを編集する場合は、それに合わせてください。既存の慣習はこれらのガイドラインより優先します。
視覚的な納品の最低基準(すべてのドキュメントに適用)
完了を宣言する前に officecli view "$FILE" html を実行し、返された HTML のパスを Read して、以下がすべて満たされているか確認してください。
- プレースホルダーのトークンをデータとして表示しない。
$xxx$、{var}、{{name}}、<TODO>、lorem、xxxxは、見出し、本文、表紙、目次、キャプション、ヘッダー、フッターのいずれにも表示してはいけません。人間が記入する意図の{name}は、表示される指示の段落(「送付前に{name}を置き換えてください」)の中に入れ、完成した内容として置いてはいけません。 - タイトルの途中切れや、セルからのはみ出しをしない。 内容を削るのではなく、列幅を広げるか
wrapTextを設定してください。 - 見出しが 3 つ以上ある場合は目次を付ける(
--type toc)。 - 表紙は 60% 以上埋まっており、最終ページは 40% 以上埋まっている。 表紙が寂しい場合は、サブタイトル、作成者、日付、範囲、主要なハイライトで埋めてください。「ありがとうございました」で終わる最終ページは、結論、次のステップ、連絡先、法的事項で埋めてください。
- ドキュメント本文に
\$、\t、\nのリテラルを残さない。view textにこれらが表示される場合は、シェルのエスケープ処理が漏れています。その段落を削除して入力し直してください。
いずれかが満たされない場合は、作業を止めて修正してから完了を宣言してください。
共通のワークフロー
6 つのステップです。自明でないビルドはすべてこの流れに従います。
- ファイルを開く。
officecli open "$FILE"(既定では常駐)。新規ファイルの場合は、先にofficecli create "$FILE"を実行してください。 - 全体を把握する。 既存のファイルの場合は
officecli view "$FILE" outlineを実行します。見出しのツリー、セクション数、目次、透かし、変更履歴が既に存在するかを確認します。盲目的に編集してはいけません。 - 段階的に構築する。 構造から先に作り、次に内容、最後に書式を整えます。順序は、スタイルと番号付けの定義、セクションとページ設定、見出しと本文、表・画像・フィールド・目次、ヘッダーとフッター、コメントです。構造的な操作を行うたびに
getで結果を確認してから、その上に積み重ねてください。 - 仕様どおりに書式を整える。 見出しのサイズ、間隔、幅、配置、タブ、リストのインデントを明示的に設定します。書式は成果物の一部であり、省略してよい仕上げ作業ではありません。
- 保存し、キャッシュされたテキストより構造を信頼する。
officecli save "$FILE"で XML を書き出します。目次、PAGE、NUMPAGES、SEQ、PAGEREF のフィールドはキャッシュ値を持ちますが、人が再計算する(Word で F9 キー)までは古いか空の場合があります。表示されているテキストを信じるのではなく、フィールドが存在することを確認してください(get --depth 3で<w:fldChar>が見つかるか)。 - QA — 問題があるものとして確認する。 1 回の修正と検証のサイクルで新たな問題が見つからなくなったときに完了です。最後のコマンドが終了コード 0 で終わったことをもって完了とはしません。QA を参照してください。
クイックスタート
最小構成の docx: 見出し、本文の段落、小見出し、そしてライブのページ番号フィールドを含むフッターです。そのままコピーせず、ご自身のファイルと内容に合わせて調整してください。
FILE="review.docx"
officecli create "$FILE"
officecli open "$FILE"
officecli add "$FILE" /body --type paragraph --prop text="Q4 2026 Review" --prop style=Heading1 --prop size=20pt --prop bold=true --prop spaceAfter=12pt
officecli add "$FILE" /body --type paragraph --prop text="Revenue grew 18% year-over-year, ahead of plan." --prop size=11pt --prop spaceAfter=8pt
officecli add "$FILE" /body --type paragraph --prop text="Key Drivers" --prop style=Heading2 --prop size=14pt --prop bold=true --prop spaceBefore=12pt --prop spaceAfter=6pt
officecli add "$FILE" /body --type paragraph --prop text="Enterprise renewals, upsell, and a new EMEA region." --prop size=11pt
officecli add "$FILE" / --type footer --prop type=default --prop size=9pt --prop text="Page " --prop field=page
officecli set "$FILE" "/footer[1]/p[1]" --prop align=center
officecli save "$FILE"
officecli validate "$FILE"
確認方法: validate は no errors found を返します。get /footer[1] --depth 3 では、5 つの run からなる PAGE フィールドのチェーン(begin / instrText / separate / キャッシュされた値 / end)が表示されます。
読み取りと分析
まず広く把握し、そのあと絞り込みます。outline で既存の内容を確認し、どこを見るべきかが分かったら view text / get / query を使ってください。
officecli view "$FILE" outline # heading tree, section count, table/image counts, watermark, tracked-changes presence — orient here first
officecli view "$FILE" html # Read the returned HTML path: first visual check after a batch of edits (hierarchy, empty-para spacing, missing TOC)
officecli view "$FILE" text --start 1 --end 80 # text for content QA; paths shown as [/body/p[N]] so you can jump back with get
officecli view "$FILE" annotated # values + style/font/size + warnings per run
officecli view "$FILE" stats # paragraph counts, font usage, style distribution
officecli view "$FILE" issues # empty paras, missing alt text, spacing anomalies
officecli watch "$FILE" を実行すると、ユーザーが任意のタイミングで開けるライブプレビューが起動したままになります。エージェントの自己チェックには view html を使います。最終的な見た目の確認は、ユーザーが .docx を Word / WPS / Pages で開いて行います。
要素を 1 つ確認する。 XPath 形式のセマンティックパス(1 始まり)を使います。シェルが [N] をグロブ展開してしまうため、必ず引用符で囲んでください。最後の要素には [last()](括弧付き)を使います。[last] はエラーになります。機械が読み取る出力が必要な場合は --json を付けてください。
officecli get "$FILE" / # document root: metadata, page setup
officecli get "$FILE" "/body/p[1]" # one paragraph
officecli get "$FILE" "/body/p[1]/r[1]" # one run (character-level formatting)
officecli get "$FILE" "/body/tbl[1]" --depth 3 # table with rows and cells
officecli get "$FILE" "/footer[1]" --depth 3 # footer — check for fldChar
officecli get "$FILE" "/styles/Heading1" # style definition
officecli get "$FILE" /numbering --depth 2 # numbering abstractNum + num bindings
文書全体を検索する。 手作業で辿るのではなく、体系的なチェックのために CSS 風のセレクターを使います。演算子は =、!=、~=(部分一致)、>=、<=、[attr](属性の存在)です。詳細なリファレンスは officecli query --help で確認できます。
officecli query "$FILE" 'paragraph[style=Heading1]' # all H1s
officecli query "$FILE" 'p:contains("quarterly")' # text match
officecli query "$FILE" 'p:empty' # empty paragraphs (clutter)
officecli query "$FILE" 'image:no-alt' # accessibility gaps
officecli query "$FILE" 'paragraph[size>=24pt]' # numeric comparison
officecli query "$FILE" 'field[fieldType!=page]' # fields other than PAGE
query --json は結果を .data.results[] の中に格納します。件数を数えるには jq '.data.results | length' を使います。
大きな文書。 view outline で見出しから移動し、query で目的の箇所へ進みます。文書本体全体をコンテキストに読み込まないでください。
作成と編集
動詞は add(新しい要素の追加)、set(プロパティの変更)、remove、move、swap、batch、raw-set(最後の手段としての XML 操作)です。文書作成の 9 割は、段落、run、表、数点の画像、目次、フッターで構成されます。
段落、run、スタイル
段落(p)はブロックであり、run(r)は段落内で一貫した文字書式を持つ範囲です。段落レベルのプロパティ(スタイル、配置、間隔、インデント)は p に設定し、フォント / サイズ / 色 / 太字は r に設定します。
officecli add "$FILE" /body --type paragraph --prop text="Executive Summary" --prop style=Heading1 --prop size=18pt --prop bold=true --prop spaceAfter=12pt
officecli set "$FILE" "/body/p[1]/r[1]" --prop color=1F4E79
縦方向の間隔には spaceBefore / spaceAfter を使ってください。空の段落を連続させるのは避けます。左インデントには --prop indent=720(twips)を使い、1 行目のインデントには firstLineIndent=360、ぶら下げインデントには hangingIndent=720 を使います。先頭の空白文字は view issues で警告の対象になります。
表
表は /body/tbl[N] で、行は tr[N]、セルは tc[N] で指定します。行数と列数を指定して追加し、その後に内容を入力します。
officecli add "$FILE" /body --type table --prop rows=4 --prop cols=3 --prop width=100%
officecli set "$FILE" "/body/tbl[1]/tr[1]" --prop header=true --prop c1=Quarter --prop c2="Revenue" --prop c3="Growth"
officecli set "$FILE" "/body/tbl[1]/tr[1]/tc[1]/p[1]/r[1]" --prop bold=true
行レベルの set では height、header、および c1 / c2 / … / cN というテキストのショートカットを利用できます(cN は任意の列数に対応します)。セルの書式(太字、塗りつぶし、色)は、行レベルではなく、セルの段落 / run に設定してください。セルごとの罫線には、tc のセルレベルで border.* を設定します(--prop border.bottom="single;6;000000;0")。または、内側の段落に段落レベルの pbdr.* を設定します。
水平線 = 段落の下罫線。1 行の表は使わない。 表を区切り線として使うと、最小の高さを持つ空の枠として描画されてしまいます(ヘッダーやフッターでは特に顕著です)。代わりに、段落に pbdr.bottom(STYLE;SIZE;COLOR)を設定してください。
officecli set "$FILE" "/body/p[3]" --prop pbdr.bottom="single;6;2E75B6"
リスト(箇条書き、番号付き、多階層)
1 階層の箇条書きや番号付きリストには、段落に listStyle を設定します(listStyle は段落のプロパティであり、run のプロパティではありません。よくある間違いです)。
officecli add "$FILE" /body --type paragraph --prop text="First item" --prop listStyle=bullet
多階層(法律文書形式の 1 / 1.1 / 1.1.1)の場合は、まず abstractNum を追加し、次に num を追加し、各段落で numId を参照します。
officecli add "$FILE" /numbering --type abstractnum --prop format=decimal # → abstractNum id=0
officecli add "$FILE" /numbering --type num --prop abstractNumId=0 # → num id=1
officecli add "$FILE" /body --type paragraph --prop text="Section one" --prop numId=1 --prop ilvl=0
ID は 0 始まりです。最初の abstractNum の id は 0 で、num は abstractNumId=0 によってそれを参照し、自身には id=1 が割り当てられます。存在しない abstractNumId を指定するとエラーになるため、作成後に ID を確認してください。確認には officecli query "$FILE" 'paragraph[numId>0]' を使います。レベルや番号形式のオプションについては、help docx abstractnum と help docx num を参照してください。
タブストップ(署名行、リーダー行)
タブストップは段落の第一級の tab 子要素です。pos には 6in/6cm/twips を指定でき、val は left/center/right、leader は none/dot/hyphen/underscore のいずれかです。help docx tab を参照してください。
officecli add "$FILE" "/body/p[1]" --type tab --prop pos=6in --prop val=right --prop leader=dot
リーダーの注意点。 leader=dot だけではドットは出力されません。リーダーは、テキストとタブストップの間の run に実際の <w:tab/> 文字がある場合にのみ描画されます。テキスト内で \t を使ってこれを配置してください。まずストップを定義し(add tab --prop pos=6in --prop val=right --prop leader=dot)、次に --prop text="Chapter 1\t12" を指定します。\t は <w:tab/> に変換され、右揃えのページ番号までドットが埋められます。(リテラルの text="Chapter 1 ......... 12" も使えますが、実際のタブストップの方が綺麗に揃います。)
フィールド(PAGE / NUMPAGES / DATE / MERGEFIELD / REF)
フィールドはレンダリング時に計算される動的な値です。fieldType でフィールドを選び、name で対象(差し込み名または ref のブックマーク)を指定します。format / instr でスイッチを追加できます。
| フィールド | 用途 | 例 |
|---|---|---|
page | 現在のページ番号 | フッターでは --prop field=page、インラインでは --prop fieldType=page |
numpages | 総ページ数 | --prop field=numpages / --prop fieldType=numpages |
date | 今日の日付 | --prop fieldType=date --prop format='yyyy-MM-dd' |
mergefield | テンプレートの差し込みトークン | --prop fieldType=mergefield --prop name=CustomerName |
ref | ブックマークへの相互参照 | --prop fieldType=ref --prop name=bookmarkName |
fieldType の完全な列挙値(pageref、seq、styleref、docproperty、createdate など 30 以上)は help docx field にあります。fieldInstr という fieldType は存在しません。 型指定のショートカットで足りない場合は、instruction プロパティでフィールド命令の生テキストを指定してください。画像スイッチ(MERGEFIELD Amount \# "#,##0.00"、DATE \@ "yyyy年MM月")は --prop instruction='…' で指定します(mergefield の format プロパティは警告付きで無視されるため、instruction を使ってください)。
officecli add "$FILE" "/body/p[3]" --type field --prop fieldType=mergefield --prop name=customer_name
# Renders «customer_name» — visible placeholder, replaced in Word at mail-merge time.
MERGEFIELD テンプレートでは、プレースホルダーのリテラルを表示しないでください。 {{customer_name}} や $NAME$ を本文に表示すると、受け取る人にはテンプレートが失敗していると見えてしまいます。実際の MERGEFIELD(上記)を挿入するか、リテラルのトークンは明らかに指示用の段落だけに限定してください。query 'field[fieldType=mergefield]' で確認できます。
SEQ / PAGEREF / TOC のフィールド値。 officecli は書き込み時にレンダリング済みのフィールド値を保存しません。各パスに必要な方法で再計算してください。
- SEQ の番号付け(
Figure 1/2/3):officecli set "$FILE" / --prop recalcFields=seqは、本文のドキュメント順に SEQ フィールドを数え、キャッシュ値を書き込みます(evaluatedが true になります。スイッチや書式はhelp docx documentを参照)。見出し基準の\sやヘッダー/フッターの SEQ は Word に委ねられます。 - PAGE / PAGEREF / NUMPAGES / TOC のページ番号にはページ分割が必要ですが、officecli にはそのためのエンジンがありません。
officecli set "$FILE" /settings --prop updateFields=trueを指定すると、開いたときに Word がこれらを更新します。
複数の図を含むドキュメントでは両方を使用してください。学術論文の場合は officecli-academic-paper スキルを参照してください。
ヘッダーとフッター(ページ番号)
単一コマンドのパターンです。CLI が <w:fldChar> を挿入するため、フィールドを手作業で組み立てる必要はありません。
# Empty first-page footer — auto-enables differentFirstPage so the cover has no page number
officecli add "$FILE" / --type footer --prop type=first --prop text=""
# Default footer with live page number
officecli add "$FILE" / --type footer --prop type=default --prop align=center --prop size=9pt --prop text="Page " --prop field=page
両方が存在する場合、デフォルトのフッターは /footer[2] になります。単独の場合は /footer[1] です。確認方法: get --depth 3 で、リテラルの "Page" を含む run だけでなく fldChar 子要素が表示される必要があります(view outline は、ライブフィールドと静的テキストの両方を "Footer: Page" と表示するため、これに頼らないでください)。set --prop differentFirstPage=true は実行しないでください。このプロパティはサポートされておらず(終了コード 2 と WARNING: UNSUPPORTED が出ます。要素自体は作成されるため、--json の success を確認してください)、先頭ページ用のフッターを追加するとこのビットが切り替わります。複合的な Page X of Y については、レシピ (b) を参照してください。
目次
3つ以上の見出しを含む文書では、まず要求された範囲に実際のソースがあるかを確認してください。目次のソースには、組み込みの見出しスタイルか、outlineLvl を持つカスタム段落スタイルを使用する必要があります。太字や大きな文字サイズの標準テキストはソースになりません。適格なソースがない場合は、「Error! No table of contents entries found.」と表示される目次を挿入するのではなく、作成を中止して見出し構造を修正してください。
# Built-in Heading styles are TOC sources.
officecli add "$FILE" /body --type paragraph --prop text="Introduction" --prop style=Heading1
# Custom paragraph styles need an outline level (0 = Heading 1).
officecli add "$FILE" /styles --type style --prop id=ThesisH1 --prop type=paragraph --prop outlineLvl=0
# Add the TOC only after its sources exist.
officecli add "$FILE" /body --type toc --prop levels="1-3" --prop title="Table of Contents" --prop hyperlinks=true --index 0
ページ番号にはページ割り付けが必要です。OfficeCLI 自体では目次のページ番号を計算できません。開いたときに Word が目次(およびすべてのフィールド)を再計算するよう、updateFields=true を設定してください。Word 互換のフィールドエンジンがない場合は、目次を動的で未計算のものとして報告し、ページ番号が準備済みであるとは主張せず、静的な目次を推測で作成しないでください。
officecli set "$FILE" /settings --prop updateFields=true
get/set/remove では、/toc[1] または /tableofcontents を直接指定して目次を操作してください。
画像
画像は run の中に配置します。アクセシビリティのために代替テキストは必須です。作成時に alt を直接指定してください。
officecli add "$FILE" "/body/p[5]" --type picture --prop src=logo.png --prop width=1.5in --prop alt="Acme logo"
納品前に officecli query "$FILE" 'image:no-alt' の結果が空であることを確認してください。
グラフ
データを示す場合は、ネイティブのグラフを追加してください。編集可能で、テーマを適用でき、アクセシブルで、Word でも再描画されます。グラフを撮影した平面的な PNG 画像は使用しないでください。系列ごとに data="Label:v1,v2,…" を指定し、系列ごとに data= を1つ指定します(または series1=/series2=)。
officecli add "$FILE" /body --type chart --prop chartType=bar --prop title="Revenue by Region" --prop categories="EMEA,APAC,Americas" --prop data="2026:120,150,180"
chartType は bar / column / line / pie / area / scatter のいずれかです(軸、凡例、系列のスタイル設定は help docx chart を参照してください)。--type picture による PNG は、officecli で作成できない特殊なグラフの場合にのみ使うフォールバックです。
ハイパーリンクとブックマーク
外部リンクは hyperlink を使って追加します。
officecli add "$FILE" "/body/p[2]" --type hyperlink --prop url="https://example.com" --prop text="our site"
内部リンク(ブックマークへのリンク)では、url に #fragment を指定するのではなく、--prop anchor=bookmarkName を使用してください。
officecli add "$FILE" "/body/p[2]" --type hyperlink --prop anchor=chapter1 --prop text="See Chapter 1"
PAGEREF フィールドと表示テキストを組み合わせる方法も代替として使えます。詳しくは help docx hyperlink / help docx bookmark を参照してください。
セクションとページ設定
ドキュメントのルート / がページ設定(pageWidth、pageHeight、余白。単位はトゥイップ)を持ちます。複数セクションの文書(横向きの挿入、段組みなど)では、section の区切りを追加します。詳しくは help docx section を参照してください。camelCase(pageWidth、正式な形式)と小文字のエイリアス(pagewidth)の両方が受け付けられますが、camelCase を優先してください。
officecli set "$FILE" / --prop pageWidth=12240 --prop pageHeight=15840 --prop marginTop=1440 --prop marginLeft=1440
# Newspaper-style multi-column flow (columnSpace in twips; 720 = 0.5in):
officecli set "$FILE" / --prop columns=2 --prop columnSpace=720
強制的な改ページ
論理的な境界ごとに、改ページの方法を1つだけ使用してください。既定では、対象の見出しに pageBreakBefore=true を設定します。別の方法として、見出しの前に明示的な pagebreak を1つ挿入することもできます。同じ境界に両方の方法を組み合わせないでください。二重の改ページによって空白ページが生じる可能性があります。pagebreak を追加した直後の p[last()] に pageBreakBefore を設定しないでください。
# Default: apply the break directly to the heading.
officecli add "$FILE" /body --type paragraph --prop text="Introduction" --prop style=Heading1 --prop pageBreakBefore=true
--prop break=newPage は pageBreakBefore=true のエイリアスです。view html でプレビューし、空白ページがないか確認してください。
レポート全体向けのレシピ
長文レポートで毎回使うパターンです。いずれも実行済みで validate にも合格しています。
(a) リッチな表紙 — 入力率 60% 以上の下限を満たす。 機密性バナー、タイトル、サブタイトル、クライアント・プロジェクト・日付のブロック、主要テーマのストリップを積み重ね、次のセクションを新しいページに強制的に配置します:
officecli add "$FILE" /body --type paragraph --prop text="CONFIDENTIAL — CLIENT USE ONLY" --prop align=center --prop size=9pt --prop color=C00000 --prop spaceAfter=24pt
officecli add "$FILE" /body --type paragraph --prop text="Strategic Growth Review" --prop style=Title --prop size=32pt --prop bold=true --prop align=center --prop font=Cambria --prop spaceAfter=8pt
officecli add "$FILE" /body --type paragraph --prop text="FY26 Outlook and Scenario Planning" --prop italic=true --prop size=16pt --prop align=center --prop spaceAfter=36pt
officecli add "$FILE" /body --type paragraph --prop text='Prepared for: Acme Corp. Leadership Team' --prop align=center --prop size=11pt
officecli add "$FILE" /body --type paragraph --prop text='Engagement: 2026-04 — 2026-06' --prop align=center --prop size=11pt --prop spaceAfter=36pt
officecli add "$FILE" /body --type paragraph --prop text="Key themes: 1) margin resilience, 2) EMEA expansion, 3) capital allocation." --prop align=center --prop italic=true --prop size=10pt
officecli add "$FILE" /body --type paragraph --prop text="Executive Summary" --prop style=Heading1 --prop pageBreakBefore=true
(b) 「Page X of Y」フッター — PAGE と NUMPAGES の複合。 フッター段落を追加し、その後の 3 つの子操作で Page <X> of <Y> を動的に構築します。公式の help docx footer レシピです。
officecli add "$FILE" / --type footer --prop type=default --prop text="Page " --prop align=center --prop size=9pt
officecli add "$FILE" "/footer[1]/p[1]" --type field --prop fieldType=page
officecli add "$FILE" "/footer[1]/p[1]" --type run --prop text=" of "
officecli add "$FILE" "/footer[1]/p[1]" --type field --prop fieldType=numpages
officecli get "$FILE" "/footer[1]/p[1]" --depth 1 | grep -o fldChar | wc -l # expect ≥ 4; use grep -o ... | wc -l, NOT grep -c (single-line XML returns 1)
(c) 塗りつぶしと白の太字テキストを使ったヘッダー行。 順序が重要です。まずヘッダーセルのテキストを設定します(空のセルには run が存在しないため、空のセルに対して set …/tc[N]/p[1]/r[1] を実行すると「No r found」エラーになります)。次にセルの塗りつぶしを設定し、最後に run の書式を設定します:
officecli add "$FILE" /body --type table --prop rows=5 --prop cols=4 --prop width=100%
officecli set "$FILE" "/body/tbl[1]/tr[1]" --prop header=true --prop c1=Quarter --prop c2=Revenue --prop c3=Growth --prop c4=Status
for col in 1 2 3 4; do
officecli set "$FILE" "/body/tbl[1]/tr[1]/tc[$col]" --prop fill=1F4E79
officecli set "$FILE" "/body/tbl[1]/tr[1]/tc[$col]/p[1]/r[1]" --prop bold=true --prop color=FFFFFF
done
for row in 3 5; do for col in 1 2 3 4; do
officecli set "$FILE" "/body/tbl[1]/tr[$row]/tc[$col]" --prop fill=D9E2F3 # zebra stripe
done; done
(d) 財務表 — 数値の右揃え、合計の太字、合計行の下罫線。
for row in 2 3 4 5; do for col in 2 3 4; do
officecli set "$FILE" "/body/tbl[1]/tr[$row]/tc[$col]/p[1]" --prop align=right
done; done
for col in 1 2 3 4; do
officecli set "$FILE" "/body/tbl[1]/tr[5]/tc[$col]/p[1]/r[1]" --prop bold=true
officecli set "$FILE" "/body/tbl[1]/tr[4]/tc[$col]/p[1]" --prop pbdr.bottom="single;6;000000;0"
done
(e) 複数の箇条書きを含むセル(SWOT / リスクマトリクス)。 c1="a\nb" は 1 つの段落内に <w:br/> による改行を入れます。これは通常の複数行テキストには適していますが、箇条書きには段落を分ける必要があります。最初の項目は set c1= で設定し、その後の各箇条書きは listStyle=bullet を指定した add paragraph でセルの下に追加します:
officecli set "$FILE" "/body/tbl[1]/tr[1]" --prop c1="Installed base of 18k enterprise seats"
officecli add "$FILE" "/body/tbl[1]/tr[1]/tc[1]" --type paragraph --prop text="Margin structure above peer median" --prop listStyle=bullet
officecli set "$FILE" "/body/tbl[1]/tr[1]/tc[1]/p[1]" --prop listStyle=bullet
設定した行が一番下に来てしまった場合は、次のコマンドで並べ替えます:officecli move "$FILE" "/body/tbl[1]/tr[1]/tc[1]/p[N]" --index 0。
(f) フィールドエンジンなしの目次。 CLI のみのパイプラインでは、信頼できるページ番号を計算できません。ライブの目次は残し、updateFields=true を設定して、受け取る人に Word などの互換性のあるフィールドエンジンで文書を開くよう伝えてください。推測による静的なページ番号で置き換えてはいけません。
テンプレートの配布 — テンプレート注記と利用者向けコンテンツの分離
人事・法務・ベンダーのテンプレートには、社内限定のガイダンス(「{{CompanyName}} を置き換える」など)が含まれており、配布時には残してはいけません。使える方法は 2 つあります:
- 末尾の「テンプレート注記」セクション。 明確な
Heading 1(「人事担当者向けテンプレート注記」など)の下に、すべての指示をまとめます。配布前に、見出しから下方向をremoveで削除します(query 'paragraph[style=Heading1]:contains("Template Notes")'で位置を特定します)。 - ブックマークで囲んだ社内セクション。
__template_notes_startと_endのブックマークの間に配置し、配布時にraw-setで両アンカー間のすべてを削除します。
テンプレートの配布ゲート:削除後に query 'p:contains("Template Notes")' と query 'p:contains("{{")' の両方が空を返す必要があります。注記の段落が 1 つでも残っていると、社内向けの表現が従業員に読まれてしまいます。
高度な内容・特殊なトピック(レポートを作成する場合はスキップ)
レポート、メモ、手紙、提案書、人事テンプレートであれば、この内容は不要です。文書が学術文書(数式、脚注、参考文献)、レビュー済み(コメント、変更履歴)、または透かし付き(ウォーターマーク)である場合にのみ、以下をお読みください。
数式と脚注。 --type equation は LaTeX を受け付けます。\frac、\sum、ギリシャ文字、\mathit、\mathcal はいずれも描画されます。既定では独立した /body/oMathPara[N] のディスプレイ数式ブロックが作成されます。段落の親パスを指定して --prop mode=inline を渡すと(add "/body/p[N]" --type equation --prop formula=… --prop mode=inline)、本文中にインラインの <m:oMath> を挿入できます。脚注は段落インデックスに従って自動採番されます。参考文献の頂部インデントは、各項目に firstLineIndent=-720 indent=720 を指定します。
officecli add "$FILE" /body --type equation --prop formula="\\frac{a}{b} + \\sum_{i=1}^{n} x_i"
officecli add "$FILE" "/body/p[3]" --type footnote --prop text="See Appendix A for methodology."
コメントと変更履歴。 一括で承諾・却下するには set "$FILE" /revision --prop revision.action=accept(または --prop revision.action=reject)を使用します。/revision[@author=Alice] や /revision[@type=ins] のようなセレクターで対象を絞り込めます。個々の変更を探すには query ins と query del を使います(trackedchange はセレクターとして使えません)。ラン上に変更履歴を作成するには --prop revision.type=ins|del --prop revision.author=… を指定します(format、moveFrom、moveTo を含む revision.* の全一覧は help docx run を参照してください)。コメントを追加するには add "/body/p[4]" --type comment --prop author=… --prop text=… を使います。--prop parentId=N を指定すると返信スレッドにでき、set "/comments/comment[N]" --prop done=true で解決済みにできます(監査証跡を残すため、削除ではなく解決を推奨します。query 'comment[done=false]' を実行すると未解決のコメントを一覧できます)。プロパティのスキーマは help docx comment と help docx run を参照してください。
透かし。 add / --type watermark --prop text="DRAFT" --prop color=BFBFBF --prop opacity=0.8 の 1 つのコマンドで追加できます(既定の不透明度は 0.5)。後から調整するには set /watermark --prop opacity=… を使います。
スキルを切り替える場合。 章の草稿、脚注が 3 個以下、数式が 2 個以下、参考文献や相互参照がない場合は docx のままにしてください。引用スタイル(APA / Chicago / IEEE / GB 7714)、本文中の記述と参考文献の自動リンク、\ref を使った番号付き数式、「図表目次」、自動更新される相互参照が必要な場合は academic-paper に切り替えてください。文書の目的が データ収集 である場合は officecli-word-form に切り替えてください。対象は、記入式フォーム、利用者が記入する欄のある契約書、アンケート、差し込み印刷用テンプレートです(<w:sdt> のコンテンツコントロール、<w:ffData>、documentProtection=forms を使用します)。
生 XML 設定のエスケープハッチ(L1 / L2 / L3)
精度は 3 段階あります。目的を果たせる最も低いレベルを使ってください。
- L1 — 高水準のプロパティ(
--prop text=…、--prop style=Heading1):既定で使うレベルです。約 80% のケースをカバーします。 - L2 — ドット区切り属性によるフォールバック(
pbdr.top=、ind.left=、shd.fill=、padding.top=、font.size=):L1 に必要な設定項目がない場合に使います。例:--prop pbdr.bottom="single;6;1F4E79;0"。スキーマに適合した XML を出力します。 - L3 — XML を使った
raw-set:最後の手段で、スキーマによる保護はありません。内部ハイパーリンク、複合フィールド、その他の型付きverbで表現できない構造に使用します(XML 付録を参照)。
罫線は style;size;color;space の形式で指定します。例:single;4;FF0000;1。16 進数の色コードは # で始めません。例:FF0000。テーマカラー名(accent1..6、dark1/dark2、light1/light2、hyperlink)は 16 進数の色を指定できる箇所であればどこでも使えます。テーマが変わっても色を安定させるには、16 進数の指定を優先してください。
QA(必須)
問題があると想定してください。QA は確認作業ではなく、不具合を探し出す作業です。 最初の文書が正しいことはほとんどありません。初回の確認で問題がゼロだった場合は、十分に注意して見ていなかったということです。view outline で H1 の直下に H3 が表示されるまで見出しは正しく見えます。また、get --depth 3 で静的なランであり、フィールドではないことが分かるまでは、フッターに「Page 1」と表示されているように見えます。
「完了」までの最小サイクル
officecli view "$FILE" issues— 空の段落、代替テキストの欠落、書式の異常を確認します。officecli view "$FILE" outline— 見出しの階層(H1 → H3 のように飛んでいないか)、目次の有無、セクション数を確認します。officecli view "$FILE" text --max-lines 400— 誤字、残った\$/\t/\nのリテラル、プレースホルダートークンを確認します。officecli validate "$FILE"— スキーマチェックです(Delivery Gate では、閉じられたディスク上のファイルに対してこれが再実行されます)。- ビジュアル確認 — ドキュメント全体をコンタクトシートで確認(画像を解釈できるビジョン対応エージェントのみ。画像を解釈できない場合はこの手順を省略してください。その場合、手順 1〜4 が確認の上限であり、引き渡し時にドキュメントを「視覚的に未検証」と明記してください)。
officecli view "$FILE" screenshot --grid auto -o /tmp/sheet.pngを実行し、その画像を Read します。--grid autoはすべてのページを 1 枚の画像にタイル表示します(列数は自動。強制するには--grid 4のように指定します)。これにより、DOM だけでなく、ページ区切り、白紙ページ、見出しのリズム、偏った余白、目次や表紙の配置を実際に目で確認できます。Windows + Word 環境では各ページが実際の Word で描画されます。それ以外の環境では HTML で描画されます。スクリーンショットが失敗した場合はview htmlにフォールバックし、ページをまたぐ改ページ、配置、リズムについては「視覚的に未検証」と明記してください。サムネイルは問題の所在を特定するためにのみ使用します。細かい判断(列の揃い、行間、インデント、暗い背景上の暗い文字、キャプションの配置)は、問題のあるページをscreenshot --page N(--gridなし。Windows では実際の Word)で原寸にして確認してください。「validate が通った」は納品ではありません。「実際の文書らしく見える」ことが納品の条件です。 - いずれかが失敗した場合は修正し、サイクル全体を再実行してください。1 つの修正が別の問題を生むことがよくあります。
Delivery Gate(引き渡し前に実行してください。いずれかが失敗した場合は REJECT とし、納品しないでください)
コピー&ペーストし、FILE を設定したうえで、すべてのゲートが OK を出力するまで完了を宣言しないでください。
FILE="your-file.docx"
# Gate 1 — schema.
officecli close "$FILE" 2>/dev/null
officecli validate "$FILE" | grep -q "no errors found" || { echo "REJECT Gate 1: validate failed"; exit 1; }
echo "Gate 1 OK"
# Gate 2 — token leak (shell-escape / template tokens / literal \$ \t \n). grep -c never false-PASSes.
LEAK=$(officecli view "$FILE" text | grep -cE '(\$[A-Za-z_]+\$|\{\{[^}]+\}\}|<TODO>|xxxx|lorem|\\[\$tn])')
[ "$LEAK" -eq 0 ] && echo "Gate 2 OK" || { echo "REJECT Gate 2: $LEAK leak line(s)"; officecli view "$FILE" text | grep -nE '(\$[A-Za-z_]+\$|\{\{[^}]+\}\}|<TODO>|xxxx|lorem|\\[\$tn])'; exit 1; }
# A TOC placeholder is valid before a Word-compatible field engine updates it; confirm the TOC field and updateFields setting structurally instead.
# Gate 3 — live PAGE field exists when a footer is expected.
FLD=$(officecli query "$FILE" 'field[fieldType=page]' --json | jq '.data.results | length')
[ "$FLD" -ge 1 ] && echo "Gate 3 OK" || { echo "REJECT Gate 3: no live PAGE field"; exit 1; }
echo "Delivery Gate PASS"
フィールド / キャッシュ値の確認
フィールドは書き込み時点では古い、または空のキャッシュ値を持つことがあるため、存在の確認はテキストではなく構造で行ってください。
- フッターの PAGE:
get /footer[N] --depth 3で、begin / instrText / separate / cached / end の実行(run)の連なりを確認します。単一の PAGE には 5 個以上の run が必要で、「Page X of Y」の複合フィールドには 11 個以上が必要です。テキストが"Page"だけの単一 run の場合はフィールドが欠落しています。--prop field=pageで再追加してください。 - TOC:
get /toc[1] --depth 2でフィールド構造を確認します。再計算されるまで、ページ番号が1 1 1 1やUpdate field to see…と表示されることがあります(§目次 を参照し、updateFields=trueを設定してください)。 - MERGEFIELD:
query 'field[fieldType=mergefield]'で、スロットごとに 1 つずつあることを確認し、本文の他の場所に{{name}}のリテラルが残っていないことを確認してください。
検証の限界
validate はスキーマエラーを検出しますが、デザイン上の誤りは検出しません。ドキュメントは、見出し階層の誤り、見出し 1 のような体裁の偽の見出し(サイズだけ大きくした段落)、本文に残ったプレースホルダートークン、表紙のない文書における空の先頭ページのフッターといった問題があっても、検証を通過することがあります。検証で捉えられない問題を見つける方法は、コンタクトシートによるビジュアル確認(screenshot --grid)とフィールド構造の確認です。
QA 表示に関する注記(これらは追いかけないでください)
view textは、描画された番号に関係なく、番号付きリストの各項目に"1."と表示します。実際の出力では正しく連番になっています。view issuesは、表紙の段落、中央揃えの見出し、リスト項目、参考文献の項目に対して「本文段落に字下げがない」と指摘します。字下げが必要となるのは APA や学術論文の本文だけです。ブロック形式のプロフェッショナルな文書では、これらは想定どおりです。
既知の問題と落とし穴
何かが「壊れているように見える」場合は、追いかける前に原因を切り分けてください。[AGENT-ERROR] ドキュメントに誤りがあります(修正してください)。· [RENDERER-BUG] ドキュメントは正しく、ビューアーが異なる描画をしています(追いかけないでください)。· [SKILL gap] スキルがそのルールを教えていませんでした(issue を起票してください)。
レンダラーの不具合(ビューア間、[RENDERER-BUG] — 追及不要)
色・フィールド・チャートが壊れていると判断する前に、対象ユーザーのビューアでファイルを開いてください。そこで正しく表示されるなら、ビューア固有の不具合です。
- PAGE フィールドは再計算されるまで「Page」(番号なし)と表示されることがあります — 数字ではなく
fldCharの有無で判断してください。 - 目次(TOC)のキャッシュされたページ番号が「1 1 1 1」と表示されることがあります — F9 を押すまで続く場合があります。
- 円グラフ/ドーナツグラフの塗りつぶしが、一部のビューアで単一色にまとめられることがあります(縦棒・横棒グラフは正常に表示されます)。
- フォームコントロールのチェックボックスが二重の枠で表示されることがあります。OMML 数式のベースラインは、ビューアによってずれることがあります(XML は同一です)。
よくある落とし穴
| 落とし穴 | 正しい対処 |
|---|---|
--index と [N] | --index は 0 始まり、[N] のパスは 1 始まり |
同じ N で複数回 add --index N を実行 | 挿入するたびに後続の内容が下にずれるため、同じ N を再利用すると後から挿入した項目が先に来てしまいます。逆順で挿入するか、paraId を基準に move --after/--before を使ってください |
zsh/bash で [N] を引用符で囲まない | すべてのパスを引用符で囲んでください:"/body/p[1]" |
述語として [last] を使う | 括弧付きの [last()] にする必要があります |
| 間隔に生の twips を指定 | 12pt、0.5cm、1.5x のように単位付きの値を使ってください |
| 間隔調整に空の段落を使う | spaceBefore / spaceAfter を使ってください |
セルの書式設定に行レベルの set を使う | 行の set は height、header、c1..cN のテキストのみ対応しています。書式はセルの段落/ランに指定してください |
listStyle をランに指定する | これは段落のプロパティです |
| 先頭の空白でインデントする | indent=720 / firstLineIndent=360 / hangingIndent=720 を使ってください(ドット区切りの ind.left / ind.firstLine も使えます) |
set differentFirstPage=true で表紙のページ番号を非表示にする | 未対応です。first 型のフッターを追加してください:--type footer --prop type=first --prop text="" |
| 新しい章を次のページから始める | 見出しに pageBreakBefore=true を使ってください。明示的な pagebreak は代替手段としてのみ使い、両方は併用しないでください |
| 1 つのセルに箇条書きの段落を複数入れる | c1="a\nb" は <w:br/> による改行(1 段落)になります。別々の箇条書き段落にするにはレシピ (e) を使ってください |
ドット属性で済む場面で raw-set を使う | L3 の raw-set より L2 のドット属性を優先してください |
| 次の段落が前の見出しスタイルを引き継ぐ | 後続の段落に明示的に --prop style=Normal を設定してください |
| Word で開いているファイルを変更する | 先に Word でファイルを閉じてください |
バッチ用に echo すると $/' で壊れる | 一重引用符で囲んだデリミタの here-doc を使ってください:cat <<'EOF' | officecli batch … |
Raw-set XML 付録(L3 パターン)
raw-set はリテラルの OOXML を注入します。スキーマによる保護はありません。<w:pPr> 内の要素の順序は pStyle、numPr、spacing、ind、jc、rPr(最後)です。スマートクォートはエンティティで指定します(‘/’/“/”)。先頭または末尾に空白がある <w:t> には xml:space="preserve" を追加してください。RSID は 8 桁の 16 進数です。ユーザーが別の作成者を指定しない限り、変更履歴やコメントの作成者は「Claude」とします。
変更履歴の挿入/削除:run に --prop revision.type=ins|del を指定する高レベルの方法を優先してください。raw-set は、型付けによる方法では表現できない場合(下記のような他の作成者の変更の却下・復元)にのみ使用します。<w:r>…</w:r> 全体を置き換えてください。タグを run の内部に注入してはいけません。書式を保持するため、元の <w:rPr> を両方にコピーしてください。<w:del> の内部では <w:delText>(指示文字列の場合は <w:delInstrText>)を使用します。
<w:r><w:t>The term is </w:t></w:r>
<w:del w:id="1" w:author="Claude" w:date="2026-01-01T00:00:00Z"><w:r><w:delText>30</w:delText></w:r></w:del>
<w:ins w:id="2" w:author="Claude" w:date="2026-01-01T00:00:00Z"><w:r><w:t>60</w:t></w:r></w:ins>
<w:r><w:t> days.</w:t></w:r>
段落/リスト項目の内容をすべて削除する場合は、段落記号も削除済みとしてマークしてください(<w:pPr><w:rPr> 内の <w:del/>)。そうしないと、変更を承諾した後に空の段落が残ります。他の作成者による挿入を却下するには、自分の <w:del> を相手の <w:ins> の内部に入れ子にします。他の作成者による削除を復元するには、その後に <w:ins> を追加します(相手の変更自体は変更しないでください)。
ブックマークへの内部ハイパーリンク(高レベルの --prop anchor= を優先してください。コマンドで表現できないカスタムの run スタイルが必要な場合にのみ raw-set を使用します):
<w:hyperlink w:anchor="chapter1"><w:r><w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr><w:t>See Chapter 1</w:t></w:r></w:hyperlink>
1 つの run 内の複合フィールド(単一コマンドの方法では組み合わせられない 2 つのフィールドなど)には、fldChar begin / instrText / separate / value / end の連鎖を使用します:
<w:r><w:fldChar w:fldCharType="begin"/></w:r>
<w:r><w:instrText xml:space="preserve"> PAGE </w:instrText></w:r>
<w:r><w:fldChar w:fldCharType="separate"/></w:r>
<w:r><w:t>1</w:t></w:r>
<w:r><w:fldChar w:fldCharType="end"/></w:r>
コメントマーカーは <w:r> の兄弟要素であり、run の内部には決して置きません(返信のスレッド化と解決済みの状態は高レベルの機能です。--prop parentId=/done= を参照してください。上の「Comments」を参照):
<w:commentRangeStart w:id="0"/><w:r><w:t>annotated text</w:t></w:r><w:commentRangeEnd w:id="0"/>
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>
officecli set "$FILE" /settings --prop updateFields=true を実行すると、開いたときにフィールドを強制的に再計算できます(<w:updateFields w:val="true"/> が書き込まれます。レイアウトに依存するフィールド、つまり PAGE/PAGEREF/NUMPAGES/TOC のページ番号を対象とします。raw-set は不要です)。SEQ の連番には、Word の処理を待たずに正しいキャッシュ値を今すぐ書き込む set / --prop recalcFields=seq を優先してください。
ヘルプの案内
判断に迷ったら、officecli help docx、officecli help docx <element>、officecli help docx <verb> <element> を実行してください。エージェント向けには --json を使用できます。ヘルプが正式なスキーマであり、このスキルは判断の指針です。