QUOIT Blog

Spreadsheet_Excel_Readerを使ってみた

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

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) どうもやっぱりおかしい

なんでか、ほとんど同じ書式のエクセルファイルでも、読み込めるものと読み込めないものがあるようです。

Spreadsheet_excel_Reader データが取り込めな… – PHP – 教えて!goo

どうやら、セルの結合など、エクセルの書式が原因になっている様子?

試しに、読み込めないエクセルファイルで以下操作を行なってみました。

 (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 comment for “Spreadsheet_Excel_Readerを使ってみた