Java 解析大型xlsx文件,日期格式大小写

Java 解析大型xlsx文件,日期格式大小写,java,date,apache-poi,xlsx,Java,Date,Apache Poi,Xlsx,因为xlsx文件可能包含一百万行,所以我决定使用poi事件模型,以(ExampleEventUserModel)为例,但在解析日期格式单元格时发现一些问题 例如,我在单元格A15中的excel日期为2011年10月1日,但xml有: <c r="A15" s="11"><v>40817</v></c> 40817 它不是日期格式,甚至不是毫秒格式 如何解析事件模型的日期 致以最诚挚的问候。Excel将日期

因为xlsx文件可能包含一百万行,所以我决定使用poi事件模型,以(ExampleEventUserModel)为例,但在解析日期格式单元格时发现一些问题

例如,我在单元格A15中的excel日期为2011年10月1日,但xml有:

<c r="A15" s="11"><v>40817</v></c>
40817
它不是日期格式,甚至不是毫秒格式

如何解析事件模型的日期


致以最诚挚的问候。

Excel将日期存储为从固定起点算起的浮点天数(以及日分数)。值
40817
是从该起点到2011年10月1日的天数


POI的
HSSFCell
有一个
getDateCellValue()
方法,该方法返回Java
Date
,并将执行您想要的操作。

关于如何确定单元格是否包含日期值的后续问题,答案是没有任何简单的方法

单元格
元素具有类型属性
t
,但它不用于此Excel序列日期类型。因此,唯一区别包含编码为40817的日期的单元格和值为40817的单元格的是应用于数字的格式(通过
s
cell attibute引用)

为了确定该格式,您必须在关联的
style.xml
中查找引用样式
xf
numFmtId
属性,并尝试确定该格式是否为日期格式。为了做到这一点,你必须应用一些启发法

总而言之,当您希望将日期与其他数字数据区分开来时,这是一个巨大的痛苦,对我来说,这是SpreadsheetML格式中的一个疏忽


另外,OOXML标准确实为
t
type属性定义了
d
date值,但该值仅用于ISO 8601日期,而这些日期实际上不是由Excel生成的。(更新:此日期格式现在在Excel 2013中以严格模式使用)。

谢谢,另外,如何确定此单元格是日期格式,它没有“t”属性,或者s=“11”表示它是日期?属性是样式引用。看见