やってみるもんだな

  • 投稿日:
  • by
  • カテゴリ:
  • ハッシュタグ:

今日もいいお天気でしたが、PHP-ExcelReader の「×」が化けるバグと格闘しておりました。

Excel_Peruser動作デモだと化けないので、おとなしくユーザー登録して配布してもらえばいいんでしょうが、Gmail じゃないメールアドレスって会社のか携帯しかないのよ。

一時は諦めて携帯のアドレスで登録したんだけど、よく考えたら指定アドレス以外は受信不可に設定してあったので、確認メールを受け取れず。
仕方なく登録し直そうとしたら、「ご指定のアドレスは既に登録されています」と言われて再登録出来ず。
ホントに Excel_Peruser とは縁がないんだなと諦めた次第。

んで、PHP-ExcelReader をいろいろ調べて、原因になっていそうな部分を特定したのですが、PHP歴2ヶ月、Excelのファイル構造に関する予備知識ゼロなので、どう直せばいいのかまではわかりませんでした。

ところが、php-excel-reader のページを見ていたら、文字エンコードの問題を解決するためのパッチを発見しました。
php-excel-reader の源流は PHP-ExcelReader であり、問題の文字エンコードに関する部分はほとんど変わっていません。
PHP-ExcelReader の 561行目、

$retstr = ($asciiEncoding) ? $retstr : $this->_encodeUTF16($retstr);

を、パッチと同様に

if($asciiEncoding)
$retstr = preg_replace("/(.)/s", "$1\0", $retstr);
$retstr = $this->_encodeUTF16($retstr);

に置き換えたら、「×」の文字化けが無くなりました!
シート名のところも変更した方がいいのかな?と思いますが、そちらは化けてもいいので放置します。

ところで、php-excel-reader の最新版(2.22)は php-excel-reader2 にありました。 これは既にパッチが当たっていて文字化けは起こりませんし、Split がどうたらというエラーメッセージも出ません。
ただ、セル書式など取得できる情報が増えたぶん、処理速度は遅くなっているようです。 単にセル内の値を取得するだけなら PHP-ExcelReader 改の方が速いです。

これでようやく解決ですが、長い目で見ると PHPExcel を使うのが一番かもと思います。 コードも整っているし、現状でもExcel2007に対応していますが、その先の将来性もありそうです。
ウチの職場はExcel2003ですが、一部で97/2000のデータもまだ残っています。 それでも Windows 7 が入ってくるようになると、MS Office もバージョンアップするでしょうしね。