PHPでWordを出力する方法【PHPWord】

  • 2020.02.21
  • PHP
PHPでWordを出力する方法【PHPWord】

PHPWordは、PHPでWordを出力するための有名なライブラリです。
ここでは、その「PHPWord」を使用してExcelを出力する一般的な方法を紹介します。

「PHPOffice/PHPWord」公式サイト
https://github.com/PHPOffice/PHPWord

インストール

composerを使用してインストールすることができます。

*「composer」のインストール方法は、「composerのインストールと使い方」で紹介しています。

mkdir PHPWord

cd PHPWord

composer require phpoffice/phpword

基本的な出力方法

<ソース>

// ライブラリ読み込み
require_once './PHPWord/vendor/autoload.php';

// PHPWordインスタンス
$phpWord = new \PhpOffice\PhpWord\PhpWord();

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

// 文字列の記述
$section->addText("テスト");

// Word作成
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');

// サーバーに出力
$filename = "sample_" . date('YmdHis') . ".docx"; //ファイル名
$objWriter->save("./data/" . $filename);

<出力結果>

<ブラウザに出力する場合は、サーバー出力の部分を下記に変更する>

//ブラウザに出力
$filename = "sample_" . date('YmdHis') . ".docx"; //ファイル名
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename*=utf-8''" . urlencode($filename));
header("Content-Transfer-Encoding: binary ");
$objWriter->save('php://output');

フォントの書体を変更する

<ソース>

$section->addText(
	'フォントの書体', // 文字列
	array(
		'name' => 'MS ゴシック', // 種類
		'size' => 20, //サイズ
		'color' => 'FF0000', // 色
		'bold' => true // 太字
	)
);

<出力結果>

文字揃えを指定する

<ソース>

$section->addText(
	'右寄せ',
	array('name' => 'MS 明朝'),
	array('alignment' => \PhpOffice\PhpWord\SimpleType\Jc::START) // 右寄せ
);

$section->addText(
	'中央寄せ',
	array('name' => 'MS 明朝'),
	array('alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER) // 右寄せ
);

$section->addText(
	'左寄せ',
	array('name' => 'MS 明朝'),
	array('alignment' => \PhpOffice\PhpWord\SimpleType\Jc::END) // 右寄せ
);

<出力結果>

テーブルを作成するく

<ソース>

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

// テーブルを追加
$table = $section->addTable();

$fontStyle = array('name' => 'MS 明朝');

$rowStyle = array(
		'borderColor' => '000000',
		'borderSize'  => 6,
		'cellMargin'  => 50,
		'valign'  => 'center',
);
$rowStyle2 = array(
		'borderColor' => '000000',
		'borderSize'  => 6,
		'cellMargin'  => 50,
		'gridSpan' => 2,
		'valign'  => 'center',
);

// テーブルを作成
$table->addRow(300);
$table->addCell(3000, $rowStyle)->addText("あいうえお");
$table->addCell(3000, $rowStyle)->addText("かきくけこ");

// 改行
$table->addRow(600);
$table->addCell(3000, $rowStyle)->addText("改行<w:br />改行");
$table->addCell(3000, $rowStyle)->addText("さしすせそ");

$table->addRow(600);
$table->addCell(null, $rowStyle2)->addText("スパン");

<出力結果>

テンプレートを読み込んで出力する

<ソース>

// ライブラリ読み込み
require_once './PHPWord/vendor/autoload.php';

// PHPWordインスタンス
$phpWord = new \PhpOffice\PhpWord\PhpWord();

// テンプレートファイル
$template_file = "./data/template.docx";

// テンプレートファイル読み込み
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($template_file);

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

// 文字列の記述
$section->addText("テスト");

// サーバーに出力
$filename = "sample_" . date('YmdHis') . ".docx"; //ファイル名
$templateProcessor->save("./data/" . $filename);

参照

https://qiita.com/satthi/items/761f7d956e2e9ca76f53