今天用 org.apache.poi.ss.usermodel 去操作excel文件的时候报了一个很奇怪的错,org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Rule M2.4 exception:this error should NEVER happen, if so please send a mail to the developers team, thanks!
这个错误看着就很有意思,说是这个错不会发生,如果发生请给开发团队邮件
查看代码发现是workbook进行数据写出的时候报的错
wb.write(fos);
我本身这里代码是用线程去操作的,所以workbook是创建的时候当作参数传入的,debug下workbook不是null,看了半天也没发现是什么问题
最后想着将上传的文件传入线程,然后线程中重新去获取一下workbook,这时候就没有问题了,数据也能正常写出
// 之前workbook就是从这里的uploadFile拿到的
Progress progress = new Progress(ils, errs, uploadFile, logFilePath, operation);
progress.start();
// 以下是线程progress中的内容
try (
// 这里再从uploadFile中重新获取下Workbook
InputStream is = new FileInputStream(uploadFile);
Workbook wb = WorkbookFactory.create(is);
)
可能是workbook不能这样当作参数去传输,不能持久化吧,遇到的话,不妨将他的上级,即file或者inputStream传过来重新获取workbook试一试