Office関連

PHPWordを使ってPHPからWordファイルを出力してみる。

最近オトカドールルミティアジュエルやらの記事ばかり書いていますが、今回はOffice系MVPらしくWordネタを書いていこうと思います。

今回紹介するのは「PHPWord」。
文字通り、PHPからWordファイルを出力するためのライブラリです。

Composerのインストール

上記GitHubのページにも書いてありますが、PHPWordはComposerを使ってインストールします。
(Composerはプロジェクト単位でパッケージ管理できるので、お手軽で便利です。)

インストールは簡単で、Windowsの場合ダウンロードページから「Composer-Setup.exe」ファイルをダウンロードして実行するだけです。
詳しい手順はこちらの記事に書かれているので、左記ページをご参照ください。

PHPWord_01

PHPWord_02

PHPWord_03

PHPWord_04

PHPWord_05

PHPWord_06

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.

PHPWord_07

GitHubのコードをコピペしたのに怒られました。
仕方がないのでバージョン指定してインストールします。

{
    "require": {
       "phpoffice/phpword": "v0.12.1"
    }
}

今度は上手くいきました。
vendorフォルダもちゃんと作成されています。

PHPWord_08

PHPWord_09

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を使ってみると・・・

PHPWord_10

PHPWord_11

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

PHPWord_12

ファイルの新規作成だけでなく、下図のように既存ファイルを読み込んで、指定部分を置き換えることもできます。

<?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");

PHPWord_13

PHPWord_14

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

関連記事

  1. Office関連

    Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

    自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcel…

  2. アイコン一覧

    Office 2013 アイコン一覧(H)

    ・Office 2013 アイコン一覧 NUM…

  3. Office関連

    ヘッドレス ChromeをSeleniumBasicで動かしてみました。

    Chromeがヘッドレスモードに対応した頃、Seleniumで操作した…

  4. Office アドイン

    Office 365でVisio JavaScript APIsを試してみました。

    昨年末にVisio Onlineの機能をJavaScriptで拡張する…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP