最近オトカドールやルミティアジュエルやらの記事ばかり書いていますが、今回はOffice系MVPらしくWordネタを書いていこうと思います。
今回紹介するのは「PHPWord」。
文字通り、PHPからWordファイルを出力するためのライブラリです。
Composerのインストール
上記GitHubのページにも書いてありますが、PHPWordはComposerを使ってインストールします。
(Composerはプロジェクト単位でパッケージ管理できるので、お手軽で便利です。)
インストールは簡単で、Windowsの場合ダウンロードページから「Composer-Setup.exe」ファイルをダウンロードして実行するだけです。
詳しい手順はこちらの記事に書かれているので、左記ページをご参照ください。






PHPWordのインストール
Composerのインストールが終わったら、次はPHPWordのインストールです。
composer.jsonファイルを下記のように記述して「composer install」コマンドを実行すると・・・
{
"require": {
"phpoffice/phpword": "v0.13.*"
}
}
Problem 1
- The requested package phpoffice/phpword v0.13.* exists as phpoffice/phpword[0.10.0, 0.10.1, 0.11.0, 0.11.1, 0.12.0, 0.7.0, 0.8.0, 0.8.1, 0.9.0, 0.9.1, dev-develop, dev-master, v0.12.1] but these are rejected by your constraint.

GitHubのコードをコピペしたのに怒られました。
仕方がないのでバージョン指定してインストールします。
{
"require": {
"phpoffice/phpword": "v0.12.1"
}
}
今度は上手くいきました。
vendorフォルダもちゃんと作成されています。


PHPWordの呼び出し
PHPWordのインストールが終わったので、いよいよPHPから呼び出してみます。
<?php
require_once './vendor/autoload.php';
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();
$fontStyle = new \PhpOffice\PhpWord\Style\Font();
$fontStyle->setBold(true);
$fontStyle->setName('MS Pゴシック');
$fontStyle->setSize(24);
$myTextElement = $section->addText('こんにちは、世界。');
$myTextElement->setFontStyle($fontStyle);
//ダウンロード用
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="sample.docx"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
ob_end_clean(); //バッファ消去
$xmlWriter->save("php://output");
・・・が、まさかのFatal error。
Fatal error: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name in C:\xampp\htdocs\PHPWord\vendor\phpoffice\phpword\src\PhpWord\Style\AbstractStyle.php on line 20
PHP 7だと型名と同じクラス名が作れないようです。なるほど。
ならば仕方がないので、PHP 5.6を使ってみると・・・


今度は無事にコードが実行され、Wordファイルの作成を確認できました。
日本語も問題なく表示され、フォントも指定したものになっています。

ファイルの新規作成だけでなく、下図のように既存ファイルを読み込んで、指定部分を置き換えることもできます。
<?php
require_once './vendor/autoload.php';
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('template.docx');
$templateProcessor->setValue('name', '佐藤');
$templateProcessor->setValue('weather', 'くもり');
//ダウンロード用
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="sample2.docx"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
ob_end_clean(); //バッファ消去
$templateProcessor->saveAs("php://output");


短いコードでWordファイルの編集・保存ができる便利なライブラリです。
ドキュメントやサンプルコードも充実しているので、興味がある方は是非お試しください。



















この記事へのコメントはありません。