{ 2013.11.7 }

Apache POIをPHPで動かせるようにしてみた

    はてなブックマーク - Apache POIをPHPで動かせるようにしてみた
    このエントリーをはてなブックマークに追加

    お久しぶりです。
    最近ホークスの秋季キャンプに行ってきた萩原です。

    今回Fusic勉強会 #1で発表しました。
    ご参加いただいた皆様ありがとうございました!
    まだ試行錯誤の段階ですがいい勉強会にしていけたらいいなと思います。

    発表内容の詳細は上のスライドを見ていただくとして、
    発表でも紹介したApache POIをPHPで動かしたものをご紹介します。

    Apache POIとは?

    poi.apache.org/

    Apache POI
    ExcelやWordなどのOfficeのファイルを書きだすJavaのライブラリです。
    ただまぁ公式を見てもらったらわかると思いますが、Excelだけやたら充実しまくってます。
    つか公式見てもWordとかPowerpointの使い方分かりませんし、検索してもあまり情報が見つかりません・・・。

    POIのExcelですが、値の埋め込みやセルのコピー、スタイルのセットなど
    通常Excelで行える操作は一通り行えます。
    (できることはPHPExcelと同等以上かと思います。)

    POIをPHPから動かしたい!

    そんなPOIをPHPから動かしたいと考えました。
    現在それとなくGithubで作成中です。

    やってることは

    ①:出力したい情報(埋め込む値やスタイルの情報)をまとめて、CSVに出力。
    ②:①のCSVファイルとテンプレートファイル、出力先のファイルを指定してexecでjavaを叩く。
    ③:出力されたExcelファイルをPHPで処理。

    といった流れになっています。

    こんな感じでExcelを出力できるようにしています。

    $ExcelExport = new PoiPHP();
    $ExcelExport->settings(array(
    	'poi_path' => dirname(__FILE__) . '/Vendor/poi/poi-3.9',
    	'opencsv_path' => dirname(__FILE__) . '/Vendor/poi/opencsv-2.3/deploy/opencsv-2.3.jar',
    	'tmp_csv_dir_path' => dirname(__FILE__) . '/export',
    ));
    $ExcelExport->addString(0,0,0,‘test');
     
    $readfile = dirname(__FILE__) . ‘template.xlsx';
    $outFile = dirname(__FILE__) .’export.xlsx';
     
    $ExcelExport->excelExport($readfile, $outFile);

    詳細な使い方はgithubのREADMEを参照してもらえたらわかると思います。

    POIを使うメリット

    とは言っても、正直色々設定が面倒なので
    通常帳票を出力するにあたってはPHPではreviserやPHPExcelで十分だと思います。

    POIを使うメリットとしては
    ①シートをまたいだ計算式を含むテンプレートに値を埋め込む時
    reviserだとPHPエラーで落ちます。
    PHPExcelだとうまくいきますが、あまり複雑だったりするとPHPエラーで落ちてしまったりするようです。(詳細不明)

    ②テンプレートにマクロがいて、そのマクロを出力後に使用したい時
    まだ、これを案件で使用してはいないですが、個人的にこれは熱いです。
    (reviserやPHPExcelではマクロが削除されたりPHPエラーで落ちたりします。)

    もし、reviserやPHPExcelで出力できなくて困っている方はPOIの使用を検討してみてください!
    poi-phpも値の挿入やスタイルのセットは問題なく動作すると思います。
    (画像の挿入などで現在苦戦中ですが・・・)

    Comments are closed.