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関連

    名前空間を指定してXPathで要素を取得するVBAマクロ

    Tech Communityに、“XPathで名前空間プレフィックス付…

  2. Office関連

    スライド内容を自動的に機械翻訳するPowerPointマクロ

    前回の記事で紹介した各スライドに配置されたオートシェイプからテキストを…

  3. Office関連

    Office 2010のオブジェクトリスト

    オブジェクト ブラウザーから取得できる、各Office 2010アプリ…

  4. Office関連

    Office 2013をインストールしてみました。

    CNET Japanの記事「マイクロソフト、「Office 2013」…

  5. Office関連

    ルビ(ふりがな)を一括設定するWordマクロ(改良版)

    これまで当ブログではルビを設定するWordマクロについて、いくつか記事…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP