解决com.alibaba.excel.exception.ExcelGenerateException: Can not close IO.
我在使用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.的更多相关文章
- Atitit 解决Unhandled event loop exception错误的办法
Atitit 解决Unhandled event loop exception错误的办法 查看workspace/.metadata/.log org.eclipse.swt.SWTError: No ...
- 友好解决POI导入Excel文件行是不是为空
继 解决POI读取Excel如何判断行是不是为空 后发现了一个问题.这个是一个银行的需求,有20万个客户的资料要导入系统,但有的资料是有问题的(不能正常导入),但也有能正常导入的.现在的问题是怎么知道 ...
- 解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .
解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 . xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFi ...
- c# 解决IIS写Excel的权限问题
c# 解决IIS写Excel的权限问题 from: http://www.jb51.net/article/31473.htm 发布:mdxy-dxy 字体:[增加 减小] 类型:转载 使用以上方法必 ...
- 关于解决java读取excel文件遇空行抛空指针的问题 !
关于解决java读取excel文件遇空行抛空指针的问题 ! package exceRead; import java.io.File; import java.io.FileInputStream; ...
- 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 ...
- 解决方案--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 ...
- 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 ...
- nested exception is java.sql.SQLException: IO 错误
1.错误描述 (mx.messaging.messages::ErrorMessage)#0 body = (null) clientId = "18CE3B03-9709-9DA8-763 ...
- 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 ...
随机推荐
- sm-crypto密码算法库
一.环境配置 在之前的node.js库配置中,我们已经配置好了node和npm,再次检查配置情况 node -v npm -v npm install --save miniprogram-sm-cr ...
- spring缓存创建
/** * * <b>创建缓存</b> * <p> * 创建缓存,若已存在直接返回. * <p> * @param cacheName * @retur ...
- VS2010运行opencv的程序,出现“应用程序无法正常启动0xc000007b”的解决方法
问题描述 当我们在用vs2010对工程进行编译结束后,并且生成了可执行文件时,但是运用时却出现了"应用程序无法正常启动0xc000007b" 解决方法 这个通常是有一些动态链接库没 ...
- Oracle数据泵恢复用户数据实例
我们测试环境经常会遇到恢复生产数据的情况,我一般比较习惯使用数据泵来搞,这个具体根据自己的业务形态选择适合自己的方式. 此次我们说的是完全恢复用户数据,具体步骤如下: 1.备份数据 expdp tes ...
- html导出表格xls格式
<!DOCTYPE html> <html> <head> <title>table2xls</title> <meta charse ...
- 可视化 之D3 与echarts 对比以及应用场景
可视化:我们想要看出一组数据的大小关系,单看数据显然不够直观.那么我们可以将它转换为一种简单易懂的图表的形式,就可以更加直观的获取数据所传递给我们的信息.这个过程就叫做数据可视化.可视化常用2个前端库 ...
- #ifdef _WIN32 #ifdef _WIN64
#ifdef _WIN32#ifdef _WIN64 这样的代码,实际上这提供了一种抽象机制,使代码可以在不同平台间移植. #ifdef _WIN32 #ifdef _WIN64 {windows 6 ...
- 【shell脚本实战】脚本#35 分析每个用户使用的磁盘空间大小
#!/bin/bash #设置 一个变量代表临界值,看看是否能超过这个值,单位是MB MAXDISKUSAGE=20000 #cut -d: -f1,3 /etc/passwd | awk -F: ' ...
- 简单a+b
1 # include <stdio.h> 2 3 /*输入两个整数a和b,计算a+b的和 4 注意此题是多组测试数据 */ 5 6 // 我的解法 7 void main(){ 8 in ...
- OPENGL入门的小知识点
记录一下看到的知识点. 大部分知识点来自于https://learnopengl-cn.github.io/ 1.什么是OpenGL 一般它被认为是一个API,包含了一系列可以操作图形.图像的函数.然 ...