在Java中读取大型Excel文件的最佳API是什么?

4
我的应用程序需要以下功能:
1)读取格式为.xls或.xlsx的大型Excel文件。
2)将每一列作为上一列的子节点插入到数据库中,即如果有5列和30,000行,则将第1列作为父节点,第2列作为第1列的子节点,第3列作为第2列的子节点,以此类推...即树形结构。
现在,有人能建议我在Java语言中使用哪个最好的API来完成这个功能吗?
经过一番搜索,我发现有很多API可供选择,但其中哪一个是最好的呢?
参考:请查看

我有完全相同的问题。到目前为止,没有解决方案。POI想要将整个XLSX加载到内存中。如果你只是处理XLS文件,POT-3.8b5可以在几秒钟内加载和处理文件!我有一个209MB的XLS文件,我的应用程序在大约2分钟内处理了整个文件(8个选项卡中的500,000行)并插入到MySQL中。 - Piko
4个回答

5
我过去使用过POIJExcel,但最终选择了JExcel,因为它更易于使用且有更好的文档支持。我还发现,在将数据写入电子表格时,POI使用更多内存。
我建议使用JExcel,如果你遇到任何问题,我很乐意提供帮助。

我更熟悉POI,但我听说jExcel很不错,比如文档更好,可扩展性更强。 - Danny Staple
JExcel支持.xlsx文件格式吗? - Romani
好的。正如你建议使用JExcel,我查看了Jexcel API的文档,并发现它不支持.xlsx格式。http://jexcelapi.sourceforge.net/ - Romani

4
尝试使用POI,我不确定它是否支持读取.xlsx文件,也许在最新版本中可以。

1
是的,我发现POI的新版本支持.xlsx格式(POI 3.6)。 - Romani

0

你不能将其导出为 .csv 文件吗?

这可能比解析整个 .xls/.xlsx 文件要快得多。另一个好处是你只需要处理一种文件类型/格式。


我不相信JExcel能够正确处理.xlsx文件。关于POI也不确定。我同意你的观点——导出.csv文件更好。 - duffymo
如果需要自动化处理,而某些非技术业务人员只想在类似的Web界面上将Excel文件转储到上传框中,则不太方便。导出为CSV是一个手动步骤,或者需要一些VBA操作 - 如果运行它的系统不是Windows,则也无法使用。 - Danny Staple

-1
尝试使用POI - 它可以读取文件(XLS,XLSX),但数据库操作需要其他库和基本的JDBC。

虽然POI可以读取XLS和XLSX文件,但在后者的情况下它会占用大量内存。SXSSFWorkBook会将整个XSLX文件加载到内存中。一个38MB的XLSX文件需要超过-Xmx2048x的内存!! [荒谬] (http://www.urbandictionary.com/define.php?term=redonculous)!! - Piko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接