PHPでエクセルファイルを読み込む必要があったので、Spreadsheet_Excel_Readerを使うことにした。
しかし結構クセのある感じだったので、僕の使ったときのことを書いときます。
何かのお役に立てば。
最初に参考にしたのは下記のブログ記事。
PHPでエクセル(excel)を読み込む「Spreadsheet_Excel_Reader」|本を買わずに解決するWeb制作の小技
基本的な使い方も書いてあったので助かりました。
ただ、日本語(マルチバイト文字)を扱うときはもうちょい設定が必要。
僕の初期設定を書くと、以下のような感じ。
1) ライブラリの読み込みパスを変更(そもそもなんで違うんだよ…バカなの?死ぬの?
×
require_once 'Spreadsheet/Excel/Reader/OLERead.php';
↓
○
require_once 'oleread.inc';
一緒に入ってるファイルを読み込むように変更します。
2) PHPの初期設定
<?php
require_once('./Excel/reader.php');
# INITIALIZE
$excel = new Spreadsheet_Excel_Reader();
$excel->setUTFEncoder('mb');
$excel->setOutputEncoding('UTF-8');
# エクセル読み込み
$excel->read("hoge.xls");
# シート番号「0」の内容をダンプ(テストのためね)
var_dump($excel->sheets[0]);
?>
ってな感じ。
$excel->setUTFEncoder('mb');
$excel->setOutputEncoding('UTF-8');
日本語対応のためにこの部分を足しました。
3) どうもやっぱりおかしい
なんでか、ほとんど同じ書式のエクセルファイルでも、読み込めるものと読み込めないものがあるようです。
どうやら、セルの結合など、エクセルの書式が原因になっている様子?
試しに、読み込めないエクセルファイルで以下操作を行なってみました。
(1) 結合されているセルを一回解除
(2) もう一回同じようにセルを結合
したら、直った。
会社のエクセルはEXCEL 2003 SP3。
元のファイルを作った環境が定かでないので特定は出来ないが、環境による違いである可能性は高い。
ちなみに、セルの結合を全て解除した状態であれば問題なく読み込めたので、最悪の場合はそういう形でエクセルを作るのが良いだろう。
余談だが、ウィンドウ枠の固定は読み込みには影響ないようだ。
とりあえずこんな感じ。何かあったら追記します。
【追記 10/11/01 17:37】
やはり何かがおかしい…
var_dump($excel);
とすると、どうやら $excel->sst というところにデータが入ってるようなのでデータ自体は読み込めてるようだが、
$excel->sheets にデータが入らない。
$excel->sst にはセル情報が含まれないので、このままでは解析は不可能…どうしたものか(´・ω・`)
【追記 10/11/01 19:35】
結局、下記の方法で読み込めた。
1) エクセルのシートを全選択してctrl + cでコピー、テキストエディタに貼りつけ(僕はnotepad++使ってます)
2) テキストエディタの文面をctrl + cでコピー、元のエクセルに貼りつけ。
つまり、データを一回外に出して戻しただけ。
この操作でエクセルのヘッダ情報とか変わったりするのだろうか…
引き続き調査が必要なようです(´・ω・`)
【追記 10/11/01 20:21】
やはりバージョンによる違いが原因になっている模様。
より高機能な「Excel_Peruser」というものがあったらしいが、2010/11/01現在、ダウンロードリンクが見つからない。
プロジェクトが活動停止中となっているので、もうやめちゃったのかな…(´・ω・`)
今回はお客さんが直接データをあげられるために、という目的なので、CSVに変換してもらう方向で検討中…orz
エクセルはなかなか手強いようです(´・ω・`)
【結論 10/11/01 20:21】
利用するエクセルのバージョンを固定することができなければ、
日本語を交えたデータをSpreadsheet_Excel_Readerで扱うのは難しいようです。
もし画期的な解決策があればまた記事を書きますね。
【追記 10/11/02 12:28】
友人の@ctrlAK氏がいろいろな環境で実験してくれました。ありがとう!
ファイルの生成は以下の2環境。
1)Windows XP SP3 + Excel 2003 SP3
2)Mac OS X 10.5.8 + Excel 2008 for Mac
文字装飾、セルの結合あり。
僕と同様のプログラムで読み込みは成功したとのこと。
うーん、やはり特定の環境だけで発生するものなんでしょうか…(´・ω・`)
【この記事の続き】
今度はPHPExcelを使ってみた
1 Comments.