我在使用Apache POI时遇到性能问题。我已经阅读了有关性能测试的FAQ。我已经通过注销和4gb的堆运行了该测试,但我无法使测试的运行速度超过22秒。
这是我正在运行的测试:http
:
//svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/SSPerformanceTest.java
该FAQ说,如果我不能得到这个测试在50,000行和50列说:“问题是你的环境”下运行3秒。我已经在网上阅读了其他一些评论,这些评论都涉及禁用poi日志记录和增加堆大小,但是似乎没有任何帮助。
我还能检查什么来修复我的环境?
机器规格(个人台式机):
CPU:Intel i7 8核
内存:16GB
操作系统:Windows 7 64bit
JDK:1.8.0_66
兴趣点:3.13
JVM参数:-Xmx4g -Xms4g -Dorg.apache.poi.util.POILogger = org.apache.poi.util.NullLogger
命令参数:XSSF 50000 50 0
我还应该提到我正在使用的Apache POI罐来自Maven
Central
我已经在github上创建了一个测试项目,您可以在其中克隆项目并运行:
mvn exec:java
我对使用的参数进行了硬编码,因此您不必在命令行上输入任何特殊内容。文档说这应该在3秒内运行。
测试项目位于此处:https :
//github.com/mikedehaan/poi-test
我的机器上的测试结果:
机器规格:
CPU:Intel i3-2100,3.10 GHz,4核
内存:16GB
操作系统:Windows 7 64bit
JDK:1.7.0_76
我进行了性能分析,发现XSSF
由于xmlbeans
和poi-ooxml- schemas
库中的方法同步,所以速度很慢。您可以通知poi开发人员,并要求检查此情况。
我有点迷失了 我试过3.17、4.0.0和5.0.0版。 或 我无法获得没有弃用或类型错误的代码:-( 我将Eclipe与Maven和Java11一起使用。在版本发布之后,我做了“更新项目”来更新Maven。
在xlsx工作簿中,有些单元格具有一些无界的SUMIF公式,如下所示:。使用ApachePOI5.0.0对一个SUMIF函数的评估持续100ms,对给定工作簿的评估持续几分钟。 提高执行持续时间的一种方法是将公式绑定到如下内容:。在我的情况下,这不是一个解决方案,因为我不是xlsx文件的作者,系统从未知的人那里获取未知的xlsx文件(因此我不能仅仅告诉他们限制SUMIF范围)。 的当前实现迭代给定
在执行此代码时,它在线程"main"java.lang.NoClassDefFoundError: org/apache/Commons/math3/util/ArithmeticUtils在org.apache.poi.poifs.property.RootProperty.set大小(RootProperty.java:59)在org.apache.poi.poifs.property.Dir
我正在尝试用ApachePOI创建甜甜圈图,但没有任何信息或示例。我尝试使用饼图的例子,但没有成功。你能帮我解决这个问题吗?
我对POI还是新手,但是我想简单地在Excel工作簿中迭代一列。例如,在下表中,如果我只想要列A的值,即列0中的行0-3,有没有有效的方法来做到这一点?我所看到的所有POI都是基于行的。 我有一些大的电子表格,我可以成功地遍历整个表格,但我只是想找出处理这种事情的最佳实践。 提前感谢。
我已经编写了用于编写xlsm(Excel2007)的java文件。 使用ApachePOI库,编写xlsx文件是成功的。编写xlsm文件是成功的。但我无法打开xlsm文件,因为打开xlsm文件时出错。 使用ApachePOI库编写xlsm文件可行吗? 如果可以编写xlsm,请提供如何使用ApachePOI库编写xlsm文件的指南。 谢谢
用户可以将Excel文档保存为. xls或xml-table。结果是一个具有固定结构的xml-file,Excel可以用它纠正工作。 可以用java中的ApachePOI打开这种类型的excel文件吗? 事先谢谢你,安德烈。
我试图读取xlsx格式的excel文件。但是我得到的结果太大,无效的句柄异常。我把文件实例在一个FileInputStream对象,并试图在XSSFWorkbook中设置该对象。但是我得到了这个例外。 我工作的环境中没有安装Microsoft office,并且有开放式office。我没有在open office中编辑我的xlsx文件。但我在open office中打开了文件,然后尝试运行poi代