2012-01-19 18 views
3

xlsxファイルには100万行が含まれている可能性があるため、here(ExampleEventUserModel)の例を取っ​​てpoiイベントモデルを使用することにしました。大きなxlsxファイルの解析、日付形式の場合

たとえば、私は、セルA15でExcelの日付2011年1月10日に持っていますが、XMLはあります

<c r="A15" s="11"><v>40817</v></c> 

それもない例えばミリ秒で、日付の形式ではありません。

イベントモデルの日付を解析する方法は?

よろしくお願いいたします。

答えて

4

Excelは、固定の開始点からの浮動小数点の日数(および分数)として日付を格納します。値40817は、その出発点から1まで

2011年10月の日数であるPOIのHSSFCellのJava Dateを返し、あなたがやりたいだろうgetDateCellValue()方法があります。

+0

さらに、このセルが日付形式であること、「t」属性を持たないこと、またはs =「11」は日付であることを意味します。 –

+2

's ='属性はスタイルリファレンスです。 http://stackoverflow.com/questions/3154646を参照してください。 –

3

セルに日付の値が含まれているかどうかを判断する方法に関する後続の質問との関連では、簡単な方法はないということです。

セル<c>の要素のタイプ属性はtですが、このExcelのシリアル日付タイプには使用されません。このように、40817としてエンコードされた日付と40817の値を持つセルを区別する唯一のものは、数値に適用されるフォーマット(セルアトリビュートsを介して参照されます)です。

フォーマットを確認するには、参照されたスタイルxfnumFmtId属性を関連付けられたstyles.xmlにルックアップして、そのフォーマットが日付フォーマットかどうかを調べる必要があります。それを行うには、ヒューリスティックを適用する必要があります。

これは、日付を他の数値データと区別したい場合には非常に苦労します。これはSpreadsheetML形式の見落としです。

P.S. OOXML標準ではtタイプの属性の日付値はdと定義されていますが、実際にはExcelで作成されていないISO 8601の日付にのみ使用されます。 (更新:厳密なモードでExcel 2013でこの日付形式が使用されるようになりました)。

関連する問題