前回の挑戦が不成功に終わって悔しいのでリベンジを。
今度はちょっと重めのライブラリ、「PHPExcel」を使います。
記事執筆時点でのバージョンは1.7.4です。
参考にしたのはこちらの記事。
基本的な使い方が書いてありますが、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では回せません。。
で行き着いたのがこちら。
このブログを見ると、
$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 Comments.