我在使用easycel导出到zip包中时,出现了这个问题。各种文件输出时产生的问题其实大同小异

查看了一些网上的文章,还有github上关于此bug的issue,总算是理清并解决了。

解决方法一

主要原因是输出流过早关闭,导致执行 excelWriter.finish() 时会出错。

excelWriter是在我们创建输出表格的时候建立的对象,里面包含了IO对象;

正常单个导出的时候调用 finish() 才是正常关流,但是在输出到zip时我们采用了其它方式

workbook.write(zos); // 此方法也会关流,当第二次使用的时候会报异常

所以不用调用 finish() 方法就可以解决这个bug了

解决方法二

之前

// 直接用workbook.write(zos),
workbook.write(zos);

中间采用 ByteArrayOutputStream 解决

// workBook.write会指定关闭数据流,
// 直接用workbook.write(zos), 下次就会抛出zos已被关闭的异常,所以用ByteArrayOutputStream来拷贝一下。
ByteArrayOutputStream bos = new ByteArrayOutputStream(); // workbook写入bos
workbook.write(bos); // bos写入zos
bos.writeTo(zos);

解决方法三

如果前端页面响应时间过短,那就会断开连接,断开连接的话,响应流都没有了,肯定会在关流的时候报错啊(这个场景,就是我碰见的)

补充网络上其它解决方案

网络上其它答案说是因为版本问题,我感觉不是,因为easyexcel依赖已经完整包含了poi:3.17依赖

看图

补充方法

但是还是放上来其它人说的解决办法吧(我不用这几个):
1.检查:查看poi版本是否冲突
2.检查是否缺少依赖版本
3.检查poi的版本要大于等于3.17版本

(easyexcel2.27依赖已经包含了3.17的所有poi依赖)

总结:

  • 当我们调用 excelWriter.finish()  时, 必须保证 excelWriter 对象中的IO流未释放
  • 循环打包文件时不能直接使用 wrtite(zip文件流),中间需要用byte流转换一次
  • 注意前后端建立连接的时长
  • 注意版本号

參考地址

github上的issue地址:https://github.com/alibaba/easyexcel/issues/1872

还有excel合并zip地址:https://www.jianshu.com/p/a082eeba88a9

参考:https://www.bbsmax.com/A/B0zqravKJv/

解决com.alibaba.excel.exception.ExcelGenerateException: Can not close IO.的更多相关文章

  1. Atitit 解决Unhandled event loop exception错误的办法

    Atitit 解决Unhandled event loop exception错误的办法 查看workspace/.metadata/.log org.eclipse.swt.SWTError: No ...

  2. 友好解决POI导入Excel文件行是不是为空

    继 解决POI读取Excel如何判断行是不是为空 后发现了一个问题.这个是一个银行的需求,有20万个客户的资料要导入系统,但有的资料是有问题的(不能正常导入),但也有能正常导入的.现在的问题是怎么知道 ...

  3. 解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .

    解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .   xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFi ...

  4. c# 解决IIS写Excel的权限问题

    c# 解决IIS写Excel的权限问题 from: http://www.jb51.net/article/31473.htm 发布:mdxy-dxy 字体:[增加 减小] 类型:转载 使用以上方法必 ...

  5. 关于解决java读取excel文件遇空行抛空指针的问题 !

    关于解决java读取excel文件遇空行抛空指针的问题 ! package exceRead; import java.io.File; import java.io.FileInputStream; ...

  6. hadoop错误FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOException There appears to be a gap in the edit log

    错误: FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOExcep ...

  7. 解决方案--java执行cmd命令ProcessBuilder--出错Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2(xjl456852原创)

    当我尝试在java中通过ProcessBuilder运行window的cmd命令时出现错误: public static void main(String [] args) throws IOExce ...

  8. Exception in thread "main" java.io.IOException: Failed to set permissions of path

    在跑BuildForest的时候,编写了下面的程序: package test.breiman; import org.apache.mahout.classifier.df.mapreduce.Bu ...

  9. nested exception is java.sql.SQLException: IO 错误

    1.错误描述 (mx.messaging.messages::ErrorMessage)#0 body = (null) clientId = "18CE3B03-9709-9DA8-763 ...

  10. spark运行java-jar:Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfs

    今天碰到的一个 spark问题,困扰好久才解决 首先我的spark集群部署使用的部署包是官方提供的 spark-1.0.2-bin-hadoop2.tgz 部署在hadoop集群上. 在运行java ...

随机推荐

  1. 本地启动https服务器

    如果是vue-cli3项目,直接在vue.config.js中设置如下即可: devServer: { https: true } 如果是express项目,则根据这篇文章来操作即可:https:// ...

  2. Linux出现Read-only file system错误解决方法

    执行命令时遇到如下错误 这个问题是文件系统受损导致得,fstab文件未正确配置 解决方法: df -hT #查看一下分区及挂载信息 fsck -a /dev/sda3 -a :检查文件系统,有异常便自 ...

  3. yolov4 编译

    参考教程:https://blog.csdn.net/weixin_45102257/article/details/108872951 问题: ![image](https://img2022.cn ...

  4. SHR之员工合同解除

    员工合同解除HRContractInfoFacadeControllerBean 这块的意思的源码可以自行翻阅该源码. 调用员工的实现这个合同自动解除 String sql="select ...

  5. 064_Js常用的五大事件 onclick nochanger onload onsubmit onblur

    事件是电脑输入设备与页面交互的响应. onload加载完成事件:onload事件 是在页面被浏览器加载完成之后.自动触发的响应 onclick单击事件 onblur失去焦点事件 onchange内容发 ...

  6. 网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究

    网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究 网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究 岳峰 15901092122 --------------------- ...

  7. HCIP-ICT实战进阶04-ISIS原理与配置

    HCIP-ICT实战进阶04-ISIS原理与配置 0 前言 IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一 ...

  8. iOS 高级面试题

    面试题 iOS 基础题 分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员? 讲一下atomic的实现机制:为什么不能保证绝对的线程安全(最好可以结合场景来说)? ...

  9. 流量运营(pvuv跳出率漏斗abtest)

    AARRR模型 1. 激活: 拉新,对用户来源渠道进行分析,哪些合作.投放渠道对我们产品更合适 2. 注册: 流量激活之后,如果用户只是点进来就走了,也没什么用,合适的产品功能切合用户需求,才会有转化 ...

  10. unable to access 'http://*****/': The requested URL returned error: 414

    git拉取gitlab项目: unable to access 'http://git.yijiago.com/meimeng/lsyjg_java.git/': The requested URL ...