【发布时间】:2017-10-06 08:44:27
【问题描述】:
我需要逐行遍历 Excel 电子表格,但不是一次。我想保持一个流对电子表格打开,然后将该对象传递给另一个方法。此方法会不时要求下一行数据。这个方法已经成立了,不能改。
我最初尝试使用 XSSFWorkbook 执行此操作,效果非常好,直到我用完真实数据的内存。
然后我尝试切换到 SAX 解析器,使用 XSSFSheetXMLHandler,并使用类似于 Apache POI 项目提供的示例一 XLSX2CSV 的自定义解析器。但这会导致一次处理所有行;如果我将它们存储在内存中以供以后阅读,我也会用完内存。我也无法再访问DataFormatter,我需要它来处理单元格值。
有人可以给我指出一个允许我这样做的示例/类吗?
【问题讨论】:
-
举个很好的例子,应该没问题。我最关心的是单元格格式。
DataFormatter让它变得简单,但我自己在 XML 中......也需要一个很好的例子。 -
好吧,为了格式化 XML,您可以通过 Java Transformer 类使用 XSLT:stackoverflow.com/questions/4604497/xslt-processing-with-java
-
附注这个问题也对你有用:stackoverflow.com/questions/504689/…,SAX 和我上面提供的 XSLT 示例应该可以解决这个问题。 XSLT 相当简单,可以将其视为 XML 的样式表。
-
@MasterYoda 不幸的是,XML 选项实际上与我在问题中提到的相同。它使用自定义处理程序并一次处理所有行。我查看了您发送的 SAX 链接,我认为 SAX 是正确的选择。随着时间的推移,我不需要太多的上下文,一次只需要几行数据。到目前为止,我发现的所有 SAX 示例都使用处理程序并一次性解析整个工作表。
标签: java excel apache-poi