我正在将大量数据写入 Excel 工作表。我正在使用 XSSFWorkbook 创建 excel。对于 20,000 行,excel 写入很好。但是当我尝试写入超过100万的数据时,excel表超过3个小时都没有出来。当我分析时jstack,我发现有一个正在创建的锁XSSFCell cell = row.createCell( colNum );cell.setCellValue( value );为单元格设置值,以下是jstacks,java.lang.Thread.State: RUNNABLE at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700) at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1303) at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1190) at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:962) at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:476) at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307) at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1864) at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546) at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436) **- locked <0x000000076354cdc0> (a org.apache.xmlbeans.impl.store.Locale)** at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1500) at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:134) at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:180) at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:350) at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:320)我们该如何处理。请帮我解决这个问题。
1 回答

幕布斯7119047
TA贡献1794条经验 获得超8个赞
SXSSFWorkbook 可能是一个很好的解决方案(上面的评论)-如果您想使用 XSSFWorkbook,您可以使用 XSSFFactory 来提供更适合您需要的 SharedStringsTable(请参阅您的堆栈跟踪,它是导致锁定的 SharedStringsTable)
将 XSSFFactory 实例作为输入的XSSFWorkbook 构造函数
创建自定义 SharedStringsTable 的自定义 XSSFFactory 示例。这个文件使用共享字符串数据的临时文件,但您可以修改它以将数据保存在 HashMap 中。
添加回答
举报
0/150
提交
取消