PHPからエクセルを操作するPHP-Excelを使ってみた

この記事の続編。

作成したExcelファイルをPDFにも変換できるPHP-Excel。 今のバージョンはExcel2007形式とExcel2003までの形式と両方読み込み+書き込みできるので、PHPでExcelを操作するのに最強のライブラリだと思う。
ダウンロードはここから。

まずは環境の準備。

試すだけなら、lamppをインストールすれば環境構築終了。参考

ちなみにinstall.txtには次のように書いてある。

  • PHP version 5.2 or higher
  • PHP extension php_zip enabled
  • PHP extension php_xml enabled

Microsoft Office 2007を持っていない場合は試用版をインストールするか、Microsoftが配布している互換機能をインストールすれば2000, XP, 2003のOfficeでも2007のファイルを読み書きできるようになる。

準備完了。

まずはサンプルプログラムを動かす。

ReleasesからPHPExcelをダウンロード。

Classesのファイルはlamppのライブラリディレクトリにコピー
# cp Classes/* /opt/lampp/lib/php/

Testsディレクトリにエイリアスを設定して、Testsは書き込み可能にする。
# chmod 777 Tests

これでWebからTests内のPHPファイルにアクセスすると、サンプルの動きを確認できる。runall.phpを実行すると全て実行される。

いろんなサンプルがあるし、ドキュメントも充実しているのでやりやすい。

これで動作確認ができたら、次にやりたいことは、既存のExcelファイルを開いて、特定のセルに値を挿入。

これはサンプルの07reader.phpと03formulas.phpを組み合わせれば簡単に実現。
日本語を扱う場合はUTF8で挿入する必要あり。PHPファイルの文字コードがUTF8ならOK。

最近のバージョンは過去のExcel形式も読み込んだり、書き出したりできる。

このライブラリ絶対流行ると思う。

---

でもPDF変換したときに元のファイルに日本語が含まれていると文字化け。xlsxやxlsで吐き出すと文字化けは起きない。

内部的にFPDFを使っているみたいなので、FPDFを日本語化対応すれば可能?

TCPDFを使ってくれればいいのに・・・・

・・・あと一歩届かず。

<2009/03/04 追記>
・・・と思っていたらバージョン1.6.6になってPDFを作成するのがTCPDFを使うように変更されていた。これで日本語のエクセルも文字化けせずにPDFにすることが可能に。

・・・なってはいるけど、PHPExcel側にFontを指定するメソッドがないので文字化けせず表示させるためにはソースコードに手を加える必要がある。

具体的には/PHPExcel/Write/PDF.phpの116行目あたりにフォント指定を記述

$pdf->AddPage();
$pdf->SetFont("kozgopromedium", "", 9);
$pdf->writeHTML($html);

またバージョンが上がればソースにてを入れずにできるようになっていると思う。

でも複雑なエクセルをPDF変換するとレイアウトが崩れるので、まだ発展途上な感じ。今はTCPDF + FPDIを使った方が確実(ここの記事を参照)。

あと別件でXampp(Lampp)のライブラリにPHPExcelが組み込まれているので、最新のPHPExcelを使いたい場合、テストコードのset_include_pathを少し修正する必要がある。

//set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');
set_include_path('../Classes/');

これをしないと、バージョンの違いで下記のようなメッセージが表示されるので注意。

Fatal error: Call to undefined method PHPExcel::getWorksheetIterator() in /opt/PHPExcel/Classes/PHPExcel/ReferenceHelper.php on line 441