DOCX と PPTX のテキスト置換
replace_text(needle, replacement) は DOCX のすべての <w:t> 要素(本文、ヘッダ、フッタ)と、PPTX のすべてのスライド/ノートスライドのすべての <a:t> 要素を走査します。置換件数を返します。
これはテンプレート用の正しいツール: ソースドキュメントに {{プレースホルダ}} を定義し、実行時に埋めます。
シングルパス置換
Python
from office_oxide import EditableDocument
with EditableDocument.open("contract.docx") as ed:
n = ed.replace_text("{{client_name}}", "Acme Corp")
print(f"{n} 件置換")
ed.save("contract_acme.docx")
Rust
use office_oxide::edit::EditableDocument;
let mut ed = EditableDocument::open("contract.docx")?;
let n = ed.replace_text("{{client_name}}", "Acme Corp");
println!("{n} 件置換");
ed.save("contract_acme.docx")?;
JavaScript
import { EditableDocument } from 'office-oxide';
using ed = EditableDocument.open('contract.docx');
const n = ed.replaceText('{{client_name}}', 'Acme Corp');
console.log(`${n} 件置換`);
ed.save('contract_acme.docx');
Go
ed, _ := officeoxide.OpenEditable("contract.docx")
defer ed.Close()
n, _ := ed.ReplaceText("{{client_name}}", "Acme Corp")
fmt.Printf("%d 件置換\n", n)
ed.Save("contract_acme.docx")
C#
using var ed = EditableDocument.Open("contract.docx");
long n = ed.ReplaceText("{{client_name}}", "Acme Corp");
Console.WriteLine($"{n} 件置換");
ed.Save("contract_acme.docx");
マルチキー穴埋め
保存前に多数の置換を適用 — ファイルを毎回開き直すよりずっと安価です。
Python
fields = {
"{{client_name}}": "Acme Corp",
"{{contract_date}}": "2026-04-19",
"{{amount}}": "$120,000",
"{{tier}}": "Enterprise",
}
with EditableDocument.open("contract.docx") as ed:
for needle, value in fields.items():
ed.replace_text(needle, value)
ed.save("contract_acme.docx")
Rust
let fields = [
("{{client_name}}", "Acme Corp"),
("{{contract_date}}", "2026-04-19"),
("{{amount}}", "$120,000"),
("{{tier}}", "Enterprise"),
];
let mut ed = EditableDocument::open("contract.docx")?;
for (needle, value) in fields {
ed.replace_text(needle, value);
}
ed.save("contract_acme.docx")?;
JavaScript
const fields = {
'{{client_name}}': 'Acme Corp',
'{{contract_date}}': '2026-04-19',
'{{amount}}': '$120,000',
'{{tier}}': 'Enterprise',
};
using ed = EditableDocument.open('contract.docx');
for (const [k, v] of Object.entries(fields)) ed.replaceText(k, v);
ed.save('contract_acme.docx');
PPTX テンプレート
同じ API、同じセマンティクス — replace_text はすべてのスライドとノートスライドを走査します。
Python
with EditableDocument.open("deck_template.pptx") as ed:
ed.replace_text("{{quarter}}", "Q4 2026")
ed.replace_text("{{growth}}", "+18.4%")
ed.save("q4_deck.pptx")
Run 境界に関する注意
DOCX と PPTX はテキストを「run」に分割します — 同一スタイルの連続したスパン。Word は {{name}} を内部的に 3 つの別々の run としてレンダーするかもしれません(ユーザーがトークン途中でペーストしたり自動修正したりした場合)。replace_text はクロス run マッチを透過的に処理します: 検索前に同じスタイルウィンドウの隣接する run をマージします。
プレースホルダに特殊文字やスタイル付きスパンを使うなら、Word の「スマートクォート」より {{name}} のような単純な ASCII トークンを優先してください。クロス run マージのコストを最小化できます。
XLSX は別
replace_text は XLSX で 0 を返します。スプレッドシートのテキストは shared-strings テーブルとセル数式に存在し、<w:t> / <a:t> 要素には存在しないからです。代わりに set_cell を使用。
関連項目
- XLSX セルの設定 — スプレッドシート編集用
- 編集の概要 —
EditableDocumentが温存するもの - バッチ処理 — 多数のレコードに対するテンプレート実行