もう一年半近く前のことになりますが、PHPでMS Excelのファイルを読む方法をいくつか試しました。
最初は PHP-ExcelReader を使っていたのですが、いくつかのバグがあり、それと格闘したりしてるうちに、結局 Excel_Peruser に乗り換えて現在に至っております。
本日、久しぶりにまた読みこませたいファイルがあってやってみたのですが、どうも日付の月の部分がうまくいきません。
例えば「2010-08-20」となっているセルを読み込むと、「2010-0-20」となってしまうのです。
昔登録したユーザー名とパスワードで、Excel_Peruserのサポート掲示板に入ろうとしたら、抹消されてしまったらしく入れません。
どうしたものかとググったら、先達がおりました。
mmの最初が"0"だと取得がおかしくなってる
そこで思いついたのが、エクセルの日付をシリアルで取得してyymmdd(今回はyymmddの形式にしたかった)に変換する方法
---------------------------------------------------
$day=outStr($obj->dispcell($sn,$row,$col,1));
$day= $day - 25569;
$day= $day * 86400;
$day= date('ymd' , $day);
なるほど。 確かにうまくいきますね。
制限
日時の表示形式において 本来 ‘mm’ は2桁の月での表示ですが、分を表す’mm’との判別が困難なため 本ソフトでは ‘分’ として解釈します。よって正しく表示しない場合があります。問題となる場合は、mode=1で生値を取得して所望の表示に変換してください。
本家ブログにもちゃんと書いてありました。
Excel_Peruserも開発が停まっているし(そんなに進化が要求されるものでもないので、仕方ないのでしょう)、他に選択肢があったら乗り換えたいのですけどね。
MicrosoftもAzureなんか出してるんだから、PHPでExcelファイルを読み取る公式スクリプトを出してくれたらいいのにな。