1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPWordの使い方とテンプレートを利用した帳票作成

Last updated at Posted at 2021-04-09

背景

Wordファイル形式の帳票を生成したい。しかし、PHPWordを調査していると、期待する情報が見当たらず戸惑う。今回やりたいことは、ログインしているユーザの名前や住所などの情報があらかじめ記載されたWordファイルを提供すること。 addText()でゼロから文書を組み立てるのは実装に手間がかかり過ぎ、現実的ではありません。

すでにWordファイルはあるので、アプローチを変えて解決しました。その方法を共有します。


解決方法:既存のWordファイルをテンプレートとして利用する

ゼロからWordファイルを生成するのではなく、テンプレート機能を活用します。テンプレートを、普通のWordファイルとして作成し、動的に変更したい箇所を${名前}${住所}のようなプレースホルダ文字列に置き換えます。

手順

  1. テンプレートの準備

    • Wordで帳票の雛形を作成します。
    • 動的に変更したい箇所を${プレースホルダ名}形式で記述します。
  2. 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で提案されている方法を参考にしてください。ただし、根本的な解決には以下の方法が有効です。

  1. LibreOfficeやOpenOffice系を使用
    Microsoft Wordではなく、LibreOfficeなどでテンプレートを作成すると問題なく動作します。

  2. 表示確認はMicrosoft Wordで行う
    生成したファイルを最終的に確認する際はMicrosoft Wordを使うべきです。


Microsoft Wordがない場合

Microsoft Wordをお持ちでない場合は、Word Mobileなどを利用してください。


まとめ

  • PHPWordで帳票生成機能を手軽に実装するにはテンプレートとしての利用がおすすめ。
  • プレースホルダを活用して動的に値を差し込む。
  • Microsoft Wordでの編集には注意が必要。LibreOfficeを代替として使用可能。

効率的な帳票作成を目指して、ぜひ試してみてください!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?