【发布时间】:2020-08-05 20:41:27
【问题描述】:
首先,我正在使用 Apache POI 的事件 API 使用 HSSFListener 和 XSSFSheetXMLHandler.SheetContentsHandler 来读取大文件。所以我没有使用可以使用一些方便方法的工作簿。我已经用这种方法实现了它,但遇到了 OOM 错误。
对于 XLS 文件,我无法确定如何从 NumberRecord 确定格式是日期格式还是数字格式。我查看了这个旧链接 (Using Apache POI HSSFListener how to identify date type),但只有 Tika 链接有效,因为另一个链接不再存在。似乎有些修改可以与 FormatTrackingHSSFListener 一起使用,但我在那里遗漏了一些东西。
我看到有人提到使用 DateUtil 来检查值是否在下面的 InternalDateFormat 中,但这不起作用。
case NumberRecord.sid:
NumberRecord numrec = (NumberRecord) record;
if (DateUtil.isInternalDateFormat(numrec.getXFIndex())) {
System.out.println("Cell found with date value " + DateUtil.getJavaDate(numrec.getValue())
+ " at row " + numrec.getRow() + " and column " + numrec.getColumn());
} else {
System.out.println("Cell found with value " + numrec.getValue()
+ " at row " + numrec.getRow() + " and column " + numrec.getColumn());
}
我想知道 isADateFormat 方法是否可行 (https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/DateUtil.html#isADateFormat-int-java.lang.String-),但我不知道 formatString 会是什么。
想法?非常感激。文档有些在那里,但通过它很“有趣”。
【问题讨论】:
-
我已修复旧问题中指向 Apache POI 代码的链接,该代码现在位于 svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/…
标签: java excel date apache-poi poi-hssf