由於xlsx文件可能包含百萬行,因此我決定使用poi事件模型,例如here(ExampleEventUserModel),但發現某些問題解析日期格式單元格。解析大型xlsx文件,日期格式大小寫
比如我在小區A15的excel日期2011年1月10日,但XML有:
<c r="A15" s="11"><v>40817</v></c>
這不是日期格式,甚至沒有以毫秒爲例子。
如何解析事件模型的日期?
此致敬禮。
由於xlsx文件可能包含百萬行,因此我決定使用poi事件模型,例如here(ExampleEventUserModel),但發現某些問題解析日期格式單元格。解析大型xlsx文件,日期格式大小寫
比如我在小區A15的excel日期2011年1月10日,但XML有:
<c r="A15" s="11"><v>40817</v></c>
這不是日期格式,甚至沒有以毫秒爲例子。
如何解析事件模型的日期?
此致敬禮。
Excel將日期存儲爲固定起點的浮點數(天和小數部分)。值40817
是天數,從起點至1 2011年10月
POI的HSSFCell
有getDateCellValue()
方法返回一個Java Date
,並會做你想做的。
關於如何確定單元格是否包含日期值的後續問題,答案是沒有任何簡單的方法。
單元格<c>
元素具有類型屬性t
,但它不用於此Excel序列日期類型。因此,區分包含日期編碼爲40817的單元格和值爲40817的單元格的唯一方法是應用於編號(通過s
單元屬性引用)的格式。
爲了確定這種格式,您將不得不查找相關styles.xml
中引用樣式xf
的numFmtId
屬性,並嘗試確定該格式是否爲日期格式。而爲了做到這一點,你將不得不應用一些啓發式。
總而言之,如果您希望將日期與其他數字數據區分開來,並且對我來說這是一個SpreadsheetML格式的疏漏,那麼這是一個巨大的痛苦。
P.S. OOXML標準確定了t
類型屬性的d
日期值,但該值僅用於實際上不由Excel生成的ISO 8601日期。 (更新:此日期格式現在在嚴格模式下在Excel 2013中使用)。
另外,如何獲得這個單元格是日期格式,它沒有「t」屬性,或s =「11」意味着它是日期? –
's ='屬性是一個樣式引用。請參閱http://stackoverflow.com/questions/3154646 –