PHPWordでWord文書を生成する方法|インストールからサンプルコードまで解説

こんにちは、堀部です。
 
PHPで帳票やレポートを自動生成したい場面は意外と多くあります。例えば、

  • 管理画面からWord形式でダウンロードしたい
  • 請求書や報告書を自動生成したい
  • テンプレートに値を差し込みたい

こういったニーズに対して有効なのが PHPWord です。
 
この記事では、「とりあえず動かす」だけでなく「実務で使えるレベル」をゴールにして、PHPWordの使い方とハマりどころを解説します。

PHPWordとは?

PHPWordは、Microsoft Word文書(.docxファイル)を生成・操作できるライブラリです。
 
特に以下のような用途で使われます。

  • レポート・帳票の自動生成
  • Word形式でのエクスポート機能
  • テンプレートへのデータ差し込み
  • 既存Wordファイルの加工

「Wordをそのまま納品したい案件」ではかなり有力な選択肢です。
 
シンプルなテキスト出力から、帳票のような構造化されたドキュメントまで幅広く対応できる点が特徴です。

Composerを使ったPHPWordのインストール方法

PHPWordを利用するためには、まずPHPの依存関係管理ツールであるComposerを使ってインストールする必要があります。Composerをまだインストールしていない場合は、公式サイトからインストールガイドを確認してください。
Composer公式サイト
 
依存関係としてPHPWordをインストールします。以下のコマンドを実行してインストールします。

composer require phpoffice/phpword

これで、PHPWordがプロジェクトに追加され、使用できるようになります。

PHPWordでWord文書を生成する基本的な使い方

PHPWordを使って、実際にWord文書を作成する方法を紹介します。以下に、簡単なサンプルコードを示します。

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\IOFactory;

// 新しいWord文書を作成
$phpWord = new PhpWord();

// セクションを追加
$section = $phpWord->addSection();

// テキストを追加
$section->addText("こんにちは、PHPWord!");

// ファイルとして保存
$filename = "sample.docx";
$writer = IOFactory::createWriter($phpWord, 'Word2007');
$writer->save($filename);

// ファイルをダウンロードさせる(Webアプリケーションの場合)
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Cache-Control: max-age=0');
readfile($filename);
exit;

これだけでWordファイルが生成できます。シンプルな構成であれば、数行のコードでWordファイルを生成できるため、初めてでも導入しやすいのが特徴です。
 
ここからは、実務でよく使うパターンをいくつか紹介します。

実務でよく使う「テンプレート差し込み」

実務ではゼロから作るよりも、テンプレートに値を差し込むケースが多いです。以下のテンプレートに値を設定してみましょう。
 
※Wordテンプレート内に「${変数名}」の形式でプレースホルダを記述しておきます。
※変数名はsetValueで指定するキーと一致させる必要があります。(詳細は後述します)

■テンプレート例(template.docx)
氏名:${name}
日付:${date}

use PhpOffice\PhpWord\TemplateProcessor;

$template = new TemplateProcessor('template.docx');

$template->setValue('name', '山田太郎');
$template->setValue('date', date('Y-m-d'));

$template->saveAs('output.docx');

この方法を使うことで、帳票フォーマットを変更する際もPHPコードを修正せずに対応できるため、運用面でもメリットがあります。

実務でよく使う「画像挿入」

画像を挿入したい場合は、以下のようにサイズを指定して設定します。

$section->addImage('logo.png', ['width' => 100, 'height' => 100]);

実務でよく使う「テーブル生成」

請求書・一覧表などを作成する際に便利です。行や列を追加することで、一覧表や明細データなども柔軟に表現することができます。

$table = $section->addTable();

$table->addRow();
$table->addCell(2000)->addText('項目');
$table->addCell(2000)->addText('内容');

実務でよく使う「フォント指定」

日本語を扱う場合、フォントを指定しないと文字化けやレイアウト崩れが発生することがあります。フォント指定を行うことでレイアウト崩れを防ぐことができます。

$section->addText(
    '日本語テキスト',
    ['name' => 'MS Gothic', 'size' => 12]
);

PHPWordでよくあるエラーと対処法

PHPWordは便利な反面、いくつかハマりやすいポイントがあります。実務でよくある例を紹介します。

ダウンロード時にファイルが壊れる

header関数でファイルを出力する場合、出力前に空白やechoなどがあるとファイルが破損することがあります。PHPタグの前後に不要な空白がないか確認してください。

テンプレートの値が置き換わらない

TemplateProcessorを使用する場合、Wordテンプレート内の「${変数名}」とsetValueのキーが一致していないと値が反映されません。また、Word側で書式を分割していると正常に置換されない場合があります。

日本語フォントが崩れる

フォント指定をしていない場合、環境によっては文字化けやレイアウト崩れが発生します。特に日本語を扱う場合はフォントを明示的に指定することをおすすめします。

PHPWordが向いているケース・向いていないケース

PHPWordは便利なライブラリですが、すべてのケースに最適とは限りません。

向いているケース

  • 帳票やレポートを自動生成したい場合
  • Word形式でそのまま納品する必要がある場合
  • 既存のテンプレートを活用したい場合

向いていないケース

  • 複雑なレイアウトを厳密に再現したい場合
  • 大量のファイルを高速に生成する必要がある場合

用途に応じて使い分けることが重要です。

まとめ

いかがでしたでしょうか。
 
PHPWordは、PHPでMicrosoft Word文書を生成・操作する強力なツールです。レポートの自動生成やWebアプリケーションでの文書ダウンロード機能を実装する際に非常に便利です。
 
PHPWordを使いこなすことで、Word文書の作成・編集を自動化し、業務効率化に役立てることができます。こうした処理を手作業で行うのは手間がかかるため、自動化のニーズは年々高まっています。
 
さらに詳しく学びたい場合は、公式ドキュメントもチェックしてみてください。
 
 
 
 
《関連記事》

開発で稀に使うPHPの配列操作関数まとめ
技術
2024.1.29(Mon)

知っておくと便利! 開発で稀に使うPHPの配列操作関数まとめ

#まとめ#プログラム#PHP

PHPのソース内で実行されるSQLの内容を、laravel.logで確認する方法
技術
2024.10.8(Tue)

【Laravel】PHPのソース内で実行されるSQLの内容を、laravel.logで確認する方法

#PHP#SQL

Mailpitでメール送信テストを安全に行う方法
技術
2025.8.29(Fri)

【PHP×Docker】Mailpitでメール送信テストを安全に行う方法

#PHP#ツール

記事をシェア
MOST VIEWED ARTICLES