PHPWordを用いたWordの作成方法

はじめに

PHPでWordを作成できるライブラリ、PHPWordを用いたWordの作成方法をご紹介します。
今回は、Wordのテンプレートを用いてWordを作成します。

環境

  • PHP 8.0.16
  • Laravel Framework 9.6.0

PHPWordのインストール

Composerを用いてPHPWordをインストールします。

composer require phpoffice/phpword

テンプレートの読み込み方

テンプレートファイルは以下のコードで読み込むことができます。

use PhpOffice\PhpWord\TemplateProcessor;

public function createWord()
{
    // テンプレート読み込み
    $template = new TemplateProcessor('sample/sampleWord.docx');
}

値を埋め込む

テンプレートの値を埋め込みたい箇所を ${変数名} とします。

以下、サンプルコードです。

use PhpOffice\PhpWord\TemplateProcessor;

public function createWord()
{
    // テンプレート読み込み
    $template = new TemplateProcessor('sample/wordTemplate.docx');

    // 値を埋め込む
    // 第一引数:変数名
    // 第二引数:埋め込みたい文字列
    $template->setValue('title', 'タイトル');

    // 保存
    $template->saveAs('sample/sampleWord.docx');
}

値を埋め込みたいときはsetValueメソッドを使います。
上記のプログラムを実行すると、以下のように値が埋め込まれたWordが作成されます。

ブロックの複製

テンプレートの複製したいブロックの先頭を ${変数名}
末尾を${/変数名}とします。

以下、サンプルコードです。

use PhpOffice\PhpWord\TemplateProcessor;

public function createWord()
{
    // テンプレート読み込み
    $template = new TemplateProcessor('sample/wordTemplate.docx');

    // ブロックの複製
    // 第一引数:変数名
    // 第二引数:繰り返す回数
    $template->cloneBlock('block', 3, true, true);

    // 保存
    $template->saveAs('sample/sampleWord.docx');
}

テンプレートのあるブロックを複製したいときは cloneBlockメソッドを使います。
上記のプログラムを実行すると以下の通り、文字列が複製されたWordが作成されます。

 

テーブルの行の複製

テンプレートの複製したいテーブルの行の各セルを ${変数名} とします。

以下、サンプルコードです。

use PhpOffice\PhpWord\TemplateProcessor;

public function createWord()
{
    // テンプレート読み込み
    $template = new TemplateProcessor('sample/wordTemplate.docx');

    // 行の複製
    // 第一引数:変数名
    // 第二引数:繰り返す回数
    $template->cloneRow('one', 3);
    
    // 中央のセルに値を埋め込む
    // $template->setValue('two#2', '中央');

    // 保存
    $template->saveAs('sample/samplaWord.docx');
}

テンプレート内で行を複製したいときは cloneRowメソッドを使います。
上記のプログラムを実行すると以下の通り、行が複製されたWordが作成されます。

中央のセルに値を埋め込みたいのであれば、
サンプルコード14行目のコードで値を埋め込むことができます。

応用編

最後に応用編です。

以下をテンプレートとします。

以下のサンプルコードを実行してみます。

use PhpOffice\PhpWord\TemplateProcessor;

public function createWord()
{
    // テンプレート読み込み
    $template = new TemplateProcessor('sample/wordTemplate.docx');

    // ブロックの複製
    // 第一引数:変数名
    // 第二引数:繰り返す回数
    $template->cloneBlock('block', 2, true, true);

    // 行の複製
    // 第一引数:変数名
    // 第二引数:繰り返す回数
    // $template->cloneRow('one#2', 3);

    // 保存
    $template->saveAs('sample/sampleWord.docx');
}

すると、以下のように出力されます。

二つ目の表の行を複製したいのであれば、
サンプルコード16行目のコードで行を複製することができます。

そして、setValueメソッドを使えば値を埋め込むことができます。

さいごに

今回は、PHPWordを用いたWordの作成方法をご紹介しました。
今回紹介したメソッド以外にも、置換や削除といったメソッドも用意されています。
詳しくは、こちらをご参照ください。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です