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があり、
単純なデータの書き込みだけならこちらを使うとよいってさ。