はじめに
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の作成方法をご紹介しました。
今回紹介したメソッド以外にも、置換や削除といったメソッドも用意されています。
詳しくは、こちらをご参照ください。