使用内存效率高的Java库读取Excel文件?[已关闭]

bhmjp9jg  于 2023-02-14  发布在  Java
关注(0)|答案(4)|浏览(132)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

我们不允许问题寻求有关书籍、工具、软件库等的推荐。你可以编辑问题,以便可以使用事实和引用来回答问题。
昨天关门了。
Improve this question
有没有一个内存效率高的Java库可以读取大型Microsoft Excel文件(.xls和.xlsx)?我对Apache POI的经验非常有限,而且据我回忆,它似乎占用了大量内存(尽管这可能只是用于编写而不是阅读)。有没有更好的东西?或者我记错和/或误用了POI?
对它来说,拥有一个“友好的”开源许可证也很重要。

wfypjpf4

wfypjpf41#

Apache的POI库有一个基于事件的API,它占用的内存更少,但不幸的是,它只能使用HSSF(可怕的电子表格格式),而不能使用XSSF(XML电子表格格式-用于OOXML文件)。

dced5bon

dced5bon2#

Excel文件格式庞大且极其复杂,任何读取其所有可能内容的东西都同样庞大且复杂。记住,它们可以包含范围、宏、链接、嵌入式内容等。
但是,如果您正在阅读一些简单的内容,如数字网格,我建议首先将电子表格转换为CSV等更简单的格式,然后再阅读该格式。

6kkfgxo0

6kkfgxo03#

看一看JExcel:
http://jexcelapi.sourceforge.net/
我不能说明内存占用,但很明显,对于大型电子表格,您将消耗大量内存进行处理。
您应该能够将其用于xls和xlsx:
Read XLSX file in Java

6pp0gazn

6pp0gazn4#

我不能直接回答你的问题,因为我没有使用Java;但是我可以分享在Perl中类似经验,这可能部分相关。
OOXML格式确实非常庞大和复杂,因此任何旨在覆盖完整规范的软件在资源方面可能都是相当昂贵的。在Perl中,读取.xlsx文件的最著名模块是https://metacpan.org/pod/Spreadsheet::ParseXLSX,它可以很好地完成中小型文件的工作;然而,它在处理大量数据时速度太慢了,所以我最终编写了另一个模块https://metacpan.org/pod/Excel::ValueReader::XLSX,功能少得多,但针对快速解析大文件进行了优化。
这个故事的寓意是:没有万能的解决方案。如果你愿意牺牲一些特性来获得更好的速度或更少的内存消耗,你可以找到其他的库。在Java中,https://github.com/dhatim/fastexcel可能是一个很好的候选者(仅仅从阅读文档中就可以看出)。

相关问题