我正在尝试打开一个Excel文件,该文件的大小为22MB
,其中包含9905
行(我认为不是很大)。
我尝试用java apache poi
打开它:
final File f = Utils.getFileWithRespectToJar(this, filename);
final Workbook workbook = WorkbookFactory.create(f);
final Sheet sheet = workbook.getSheetAt(0);
final int maxRowLength = sheet.getLastRowNum();
几秒钟后,java占用了大约3.3GB的RAM和90%的CPU,大约一分钟后,我的eclipse项目崩溃了,除了异常
java.lang.OutOfMemoryError:超出了GC开销限制
apache poi
表现不佳还是我做错了什么?
编辑:我以前使用的是.xlsm
文件(一个启用了宏的excel文件)。我再次将其另存为.xlsx
文件(禁用了宏),并将堆大小增加到4GB
。现在,在我的Eclipse应用程序崩溃之前,java大约需要15分钟才能占用4GB
的RAM(= 90%)和90%的CPU。
我使用的是apache poi 3.16
,并将我的maven pom
文件更新为使用4.0.0
(最新版本),但是此新版本的工作方式有所不同,因此我遇到了很多异常,例如:
org.apache.poi.ooxml.POIXMLException: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg / apache / xmlbeans / XmlOptions; 在 org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:66) 在 org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:648) 在org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:180) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:286) 在 org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:83) 在 org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:111)
原因:java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg / apache / xmlbeans / XmlOptions; 在 org.apache.poi.ooxml.POIXMLTypeLoader。(POIXMLTypeLoader.java:43) 在org.apache.poi.xssf.model.ThemesTable。(ThemesTable.java:86)
答案 0 :(得分:0)
我删除了所有单元格格式和宏,因此基本上excel文件现在只是黑色文本,并且apache poi不再崩溃。