No valid entries or contents found, this is not a valid OOXML (Office Open XML) file

问题描述:

导出Excel的时候出现的异常,我这个导出是为导入Excel做准备的,也就是用户先下载模板,然后根据模板填写数据再导入Excel。

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第1张图片

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第2张图片

模板当中Excel也是可以正常打开的

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第3张图片

解决过程:

Maven编译过后的target文件夹当中的Excel是否可以正常打开,显然是乱码的。Mave压缩打包,,直接导致 excel 模板文件损坏,所以解决方法就是让 Maven 压缩打包的时候过滤掉 excel 模板文件,保留原始的文件格式。

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第4张图片

首先要想将非Java文件打包到Jar或者war当中就需要在includes当中指定对应的文件位置。

关于Maven的Resource标签的用法:https://blog.csdn.net/weixin_43888891/article/details/122406081

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第5张图片

告诉Maven的编译插件,以xlsx这个结尾的文件不要进行压缩!也就是打包必须打包进去,但是你要将文件保留原样。

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第6张图片
一切都正常了紧接着又报了一个这个异常:You need to call a different part of POI to process this data (eg HSSF instead of XSSF),他让我使用HSSFWorkbook来解析,按正常来说我的模板就是xlsx呀,然后就应该用XSSFWorkbook呀。

  • HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
  • XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;

No valid entries or contents found, this is not a valid OOXML (Office Open XML) file_第7张图片
最后找着原因了,新建模板的时候就是用的xls,然后强制给他改为了xlsx。

关于Excel文件名是中文的话可能会乱码的解决方案:

// 服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String newFileName = URLEncoder.encode("各分任务负责人导入模板", "UTF-8").replaceAll("\\+", "%20");
// 当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + newFileName + ".xlsx");
// 关闭缓存(HTTP/1.1)
response.setHeader("Cache-Control", "no-store");
// 关闭缓存(HTTP/1.0)
response.setHeader("Pragma", "no-cache");
// 缓存有效时间
response.setDateHeader("Expires", 0);

你可能感兴趣的:(常见报错,xml,excel)