java - 写入 xls 文件时出错 - apache poi 多线程

标签 java excel multithreading apache apache-poi

我遇到以下问题。我正在解析一个大的 XML 文件(大约 100 MB) - 然后,在处理数据后,我将输出写入 XLS 文件。

处理是并行完成的(使用 ExecutorService),并且所有线程都写入同一个工作簿。

我得到的异常如下:

Caused by: java.lang.NullPointerException
at org.apache.poi.hssf.record.aggregates.RowRecordsAggregate.getEndRowNumberForBlock(RowRecordsAggregate.java:219)
at org.apache.poi.hssf.record.aggregates.RowRecordsAggregate.createIndexRecord(RowRecordsAggregate.java:469)
at org.apache.poi.hssf.model.InternalSheet.visitContainedRecords(InternalSheet.java:637)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:1466)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1380)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1366)
at sample.Controller.buildSpreadsheet(Controller.java:295)
at sample.Controller.generateXLS(Controller.java:325)
... 58 more

问题是有时可以正常工作,但有时会因此错误而崩溃。

有什么想法吗?

最佳答案

Apache POI 不支持多个线程写入同一工作簿,因此这将失败,正如您所发现的

Apache POI 非常高兴地支持多个线程,所有线程都写入自己的工作簿

您需要重新设计您的逻辑,以便只有一个线程写入给定的工作簿,或者应用您自己的同步逻辑来防止多个线程同时写入

关于java - 写入 xls 文件时出错 - apache poi 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877296/

相关文章:

search - Excel VLOOKUP 和 SEARCH 组合

excel - 如果值不匹配时出现匹配错误

java - 从 Singleton 调用 Vaadin 组件上的 bean 方法

Java EE 真实世界的开源应用程序

java - 使用Apache POI在Excel中使用千位分隔符格式化数字

java - 如果写入的值始终相同,则延迟初始化引用是否是线程安全的?

multithreading - 如何在不使用互斥锁的情况下从任意索引处的多个线程写入可变切片?

c++ - QThread 线程间通信:连接到 &QThread::quit 与连接到 lambda [&thread] { thread->quit();} 的奇怪行为

java - 如何在android中的另一个类中使用方法的返回值

java - 在 Spring ApplicationContext.xml 中推送 Maven 属性