背景
Wordファイル形式の帳票を生成したい。しかし、PHPWordを調査していると、期待する情報が見当たらず戸惑う。今回やりたいことは、ログインしているユーザの名前や住所などの情報があらかじめ記載されたWordファイルを提供すること。 addText()
でゼロから文書を組み立てるのは実装に手間がかかり過ぎ、現実的ではありません。
すでにWordファイルはあるので、アプローチを変えて解決しました。その方法を共有します。
解決方法:既存のWordファイルをテンプレートとして利用する
ゼロからWordファイルを生成するのではなく、テンプレート機能を活用します。テンプレートを、普通のWordファイルとして作成し、動的に変更したい箇所を${名前}
や${住所}
のようなプレースホルダ文字列に置き換えます。
手順
-
テンプレートの準備
- Wordで帳票の雛形を作成します。
- 動的に変更したい箇所を
${プレースホルダ名}
形式で記述します。
-
PHPコードでテンプレート処理
require_once 'vendor/autoload.php'; $processor = new \PhpOffice\PhpWord\TemplateProcessor('template.docx'); // プレースホルダに値を設定 $processor->setValue( ['名前', '住所'], // プレースホルダ名 [$name, $address] // 対応する値 ); // 保存 $processor->saveAs('path/to/file.docx');
これで、テンプレートを利用して動的に帳票を生成できます。
注意点
テンプレートをMicrosoft Wordで編集すると、期待通りに動作しない場合があります。これは、Word内部で${}
の構文を分解してしまうためです。
解決策
GitHubのPHPWord Issue #590で提案されている方法を参考にしてください。ただし、根本的な解決には以下の方法が有効です。
-
LibreOfficeやOpenOffice系を使用
Microsoft Wordではなく、LibreOfficeなどでテンプレートを作成すると問題なく動作します。 -
表示確認はMicrosoft Wordで行う
生成したファイルを最終的に確認する際はMicrosoft Wordを使うべきです。
Microsoft Wordがない場合
Microsoft Wordをお持ちでない場合は、Word Mobileなどを利用してください。
まとめ
- PHPWordで帳票生成機能を手軽に実装するにはテンプレートとしての利用がおすすめ。
- プレースホルダを活用して動的に値を差し込む。
- Microsoft Wordでの編集には注意が必要。LibreOfficeを代替として使用可能。
効率的な帳票作成を目指して、ぜひ試してみてください!