QUOIT Blog

今度はPHPExcelを使ってみた

この記事は6年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。

前回の挑戦が不成功に終わって悔しいのでリベンジを。

今度はちょっと重めのライブラリ、「PHPExcel」を使います。
記事執筆時点でのバージョンは1.7.4です。

参考にしたのはこちらの記事。

PHPExcelで.xls形式のファイルを扱う | バシャログ。

基本的な使い方が書いてありますが、CakePHP用に書かれているので一部修正。(Extends Objectを削除しただけ)

さて、これで使えるかな?と思ったら何故か最初の一列目しか取得できず…(´・ω・`)

なんでだろうと思って確認したのが以下の部分。

//データ領域を確認
$rowMax = $rowCount;
if (is_null($rowCount)) {
	$rowMax = $objSheet->getHighestRow();
}
$colMax = $colCount;
if (is_null($colCount)) {
	$colMax = $objSheet->getHighestColumn();
}

どうやらここでデータの範囲を指定しているらしい…
じゃあ$colMax の値がおかしいのかとおもってvar_dumpしてみたら、「 string(2) “BD” 」だってさ。
そりゃforでは回せません。。

で行き着いたのがこちら。

天文館で働くフリープログラマーのシナプスぶろぐ: PHPExcel

このブログを見ると、

$colMax = $xlsSheet->getHighestColumn();
$colsno =  PHPExcel_Cell::columnIndexFromString($colMax);

ってほら、ちゃんとやってんじゃん。

というわけでさっきの部分以下のように書き換えて解決。

//データ領域を確認
$rowMax = $rowCount;
if (is_null($rowCount)) {
	$rowMax = $objSheet->getHighestRow();
}
$colMax = $colCount;
if (is_null($colCount)) {
	$colMaxStr = $objSheet->getHighestColumn();
	$colMax = PHPExcel_Cell::columnIndexFromString($colMaxStr);
}

今度はspreadsheet_excel_readerで失敗したエクセルも読み込めた!

しかもPHPExcel自体はEXCEL2007形式に元から対応してるので、

$objReader = PHPExcel_IOFactory::createReader('Excel5');

ここを

$objReader = PHPExcel_IOFactory::createReader('Excel2007');

ってしてやれば読める(はず)。

これは便利!

これにてミッションクリアです!^q^

【追記 10/11/02 11:00】
難点があります。
まずこのライブラリ、結構重いです。
必要なクラスファイルだけで8MB近くあります。
サーバに余裕が無いときはおすすめできないかもしれませんが、今時そんな容量の少ないところはない…かな?
あと、PHP5.2.0以上が必須となってます。
必要モジュールはphp_zip、php_xml、php_gd2。
php_zipはEXCEL2007形式の時に必要とのことです。
念のため。

1 comment for “今度はPHPExcelを使ってみた