PHPでExcelを操作する方法
エクセルファイルの中にデータベースから抽出したデータを書き込みたいといと思ったので
PHPから操作できるエクセルライブラリを調査した。
PHPからエクセルを操作する方法にはいくつかあるので以下にまとめた。
ライブラリ | 読み込み(xls) | 読み込み(xlsx) | 書き込み(xls) | 書き込み(xlsx) | php4 | php5 | |
---|---|---|---|---|---|---|---|
Spreadsheet_Excel_Writer | × | × | ● | × | ● | ● | |
PHP-ExcelReader | ● | × | × | × | ● | ● | |
PHP Excel | × | ● | ● | ● | × | ● | |
Excel_Reviser | ● | × | ● | × | ● | ● | |
Excel_Peruser | ● | × | × | × | ● | ● |
PHPExcelは読み書きできるけど2007が基本。
一応BIFF8形式(2003以前)の書き込みはクラスで対応しているらしい
(http://d.hatena.ne.jp/simpraight/20070930/1191155053)
今回はすでにあるエクセルを使ってシートを追加したり、データを書き込んだりしたかったので
テンプレートベースのExcelReviserがこれにうまく当てはまったので、作ってみた。
<?php require 'Excel_Reviser/reviser.php'; $reviser = new Excel_Reviser; //保存文字コード(スクリプトとも合わせる) $reviser->setInternalCharset('SJIS'); //書き込むデータを作る $data = array(); $data[0][0] = '日付'; $data[1][0] = 'NUM1'; $data[2][0] = 'NUM2'; $col = 5; //1列目 for($i=1;$i<$col;$i++){ $day += 24*60*60; $data[0][$i] = (int)date('Ymd',time()+$day); } //2列目 for($i=1;$i<$col;$i++){ $data[1][$i] = rand(0,255) ; } //3列目 for($i=1;$i<$col;$i++){ $data[2][$i] = rand(0,255) ; } //シート名を設定(第1引数の0はシートの番号/左から順番に) $reviser->setSheetname(0,'data'); //書き込み処理 $col = 0; $row = 0; foreach($data as $key){ $row = 0; foreach($key as $value){ //型を見て保存形式を変える。 if(is_int($value)){ $reviser->addNumber(0,$row,$col,$value); } elseif(is_string($value)){ $reviser->addString(0,$row,$col,$value); }else{ $reviser->addString(0,$row,$col,$value); } $row++; } $col++; } //読み込みエクセルファイル名 $readfile = 'excel_template.xls'; //書き込みファイル名 $outfile = 'write.xls'; //保存先(相対パス) $savepath = './'; $reviser->reviseFile($readfile,$outfile,$savepath); ?>
ExcelReviserには軽量版のExcelReviserLiteがあり、
単純なデータの書き込みだけならこちらを使うとよいってさ。