PHPでExcelファイルを利用するライブラリ – php-excel-reader

ライブラリの入手

php-excel-readerってのがメジャーな様子。
セルの書式(フォント、文字色、背景色等)も読み込めるのでかなり柔軟に使えそう
php-excel-reader

使ってみたら日本語もちゃんと読み込めたので、みんなこれを使えばいいじゃん☆

使用例

拡張子xlsファイルを読み込んで、UTF-8のtsv形式のファイルに変換するサンプルを以下に示します。

[php highlight=”27″]
//先にDLしたファイルを読み込む
require_once "excel_reader2.php";

//出力用tsvファイルをオープン
$fp = fopen(‘output.tsv’, ‘w+’);

//コンストラクタ生成
$_wo_xls = new Spreadsheet_Excel_Reader();
//日本語が含まれる場合なマルチバイトの設定を行う
$_wo_xls->setUTFEncoder(‘mb’);
//エクセルは基本Shift_JISなので、読み込む時にUTF-8にする
$_wo_xls->setOutputEncoding(‘UTF-8’);
//エクセルファイル読み込み
$_wo_xls->read(‘input.xls’);

//最大行数の取得
//※ sheetsの1次元目の配列には0から始まるシート番号が入る
$_wi_max_row = $_wo_xls->sheets[0][‘numRows’];
echo ‘max lines : ‘.$_wi_max_row."\n";
//最大列数の取得
$_wi_max_col = $_wo_xls->sheets[0][‘numCols’];
echo ‘max columns: ‘.$_wi_max_col."\n";

//セルの情報をforeachでループしながら取得する
foreach ($_wo_xls->sheets[0][‘cells’] as $raw) {
$_wa = array();
for ($i=1; $i<=$_wi_max_col; $i++) {
if (array_key_exists($i, $raw)) {
$_ws = $raw[$i];
セルの中身に改行がある場合はそれを除去する
$_ws = str_replace("\n", ”, $_ws);
$_ws = str_replace("\r", ”, $_ws);
$_wa[] = $_ws;
} else {
$_wa[] = ”;
}
}
fwrite($fp, implode("\t", $_wa)."\n");
}

fclose($fp);
[/php]

ポイント1

27行目で一見$rawをforeachでループすればいいんじゃないの?って思うけど、このライブラリどうやら空のセルは読み込まないらしい。そのため、先に取得した最大列数までを固定値でループすることで、全行統一されたカラム数が維持できる。

Excelなんてほとんどが空セルだからよくよく考えれば、空のセルを読み込まないってのは当たり前だな。

ポイント2

エクセルは得てして大容量ファイルである。14行目でファイルを読み込む際はPHPのメモリサイズを意識して実行したい。
エクセルが複数シートに別れている場合、シート毎にファイルを分けておいてから処理するのも手だ。

“PHPでExcelファイルを利用するライブラリ – php-excel-reader” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です