2016-04-24 16 views
1

これに似た疑問がたくさんあることは知っていますが、実際に助けられたことはありません。 私はExcelのファイルにセルを持っていますが、それは私が読む必要があります。phpexcelの日付が間違った形式を読み取っています

Cell Date in Excel

し、Excelファイル内のフォーマット私は、セルを読み取るためにシート名とセルを取得する機能でそれを持っている私のPHPコードでDate Format In Excel

以下のようなものです。私も(getFormattedValueでこれを試してみました)と同じ結果に

を持って

$cellDate = $xls->getSheetByName($sheet)->getCell($cell)->getValue(); 

私はその後、私はPHPでこれをエコーするとき、それは示してこの

$format = $xls->getSheetByName($sheet)->getCell($cell)->getStyle()->getNumberFormat()->getFormatCode(); 

でフォーマットを取得します日付は

13/4/2015 

と表示されます。それはDD-MM-YYYYとして

を示し

mm-dd-yyyy 

私は今、私はPHPExcelで利用可能なすべての機能を使用して試してみたが、それは結果が正しくないと、まだだこれらのY-M-Dフォーマットを取得する必要があります。

が複数の形式で複数のセルがあると私は私は本当にこれを必要とし、I」

$objPHPExcel->getActiveSheet() 
->getStyle('A1') 
->getNumberFormat() 
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2); 

を使用してみました、それ自体で

を理解して、これを必要とするので、私は形式をハードコーディングすることはできませんすでに1週間で無駄になってしまった。

PHPEXCELに、セル内の日付がY-m-d形式であることを解析するように指示することはありますか?

UPDATE

私は戻って、私が書いた機能をチェックし、コメントを通読たので、私が見つかりました。つまり、それがここで間違ったフォーマットを解析していますExcelでフォーマットされています[さえ]という細胞の1そのケースは一般的なフォーマットでした。

私はgetValue()とgetFormattedValue()の値を得て、それらが同じでない場合、これらの2つを比較して、正しくフォーマットされていることを意味し、PHPExcelを使用して日付を取得できます。

しかし、(ただし、常にですが)。マイクロソフトとその優れたおかげで、私はまだ2016年2月2日と1月2日とは違うことができません!永遠に疑問が残っています。

私の唯一の推奨は、Excelフォーマットを信頼しないことです!

+0

「MicrosoftとExcelのおかげで」....厳密に言えば、MicrosoftやExcelはここでは誤りではありません。 MS Excelに内部シリアル化された日付/時刻値を使用させるのではなく、文字列値として日付を入力したユーザーです –

答えて

2

getValue()getFormattedValue()場合の両方が、あなたのセルの内容は、MS Excelの日付/時刻の値が、標準文字列は、ない13/4/2015を含む、何を達成することはありません文字列に日付書式マスクを適用しようとする文字列を返します。PHPExcelの日付書式化関数は、セルの内容が実際にはMS Excelのシリアル化された日時の値であり、単に文字列ではない場合にのみ機能します。

DateTime :: createFromFormat()のような標準のPHP関数を使用して文字列値をdatetimeオブジェクトに変換し、format()メソッドを使用して任意の形式に変換する必要があります。

また、値をPHPExcel_Shared_Date :: PHPToExcel()に渡して、MS Excelのシリアライズされたタイムスタンプに変換してみてください。それをセル値として設定し、フォーマットマスクを設定してgetFormattedValue()を使用することができます。

+0

私は1000(Locked Xls)以上のファイルを読んでいて、 2014-10-13のような日付を10/13/14、2013年10月13日、10,13,2014として取得しています私は一度私はどの形式がそれを理解することができ、まだそれを把握することができないように約800行の関数を書いたと思います。私は01/02/2016のような日付があるときに私は問題に直面するだろうが、私はそれがどのような形式であるか分からない! –

+0

私はPHPExcel_Shared_Date :: PHPToExcel()を使ってみましたが、使い方が分からないか、動作しません。 –

+0

私は、MS Excelの日付ではなく、単に文字列であると言っています。あなたは 'getValue()'と 'getFormattedValue()'の両方で返される同じ値を得ています。PHPExcelは単純に文字列であれば本当に助けになりません....もしこれらがMSS Excelの日付値だったらgetValue ()は文字列ではなく整数または浮動小数点数を返します –

関連する問題