首先Excel文件根据后缀名可分为xlsx, xls。xls为office 03版本以下生成的扩展名, xlsx为07版本的扩展名,正常来说03版本的是无法打开xlsx文件的。
使用EasyPoi导出xlsx文件, wps能正常打开,而使用office时提示文件已损坏。
对以上情况提出三种假设:
- easypoi导出excel版本的问题。
- 代码打成jar包后,会压缩源文件,读取文件流方式有问题。
- 字符编码问题。
1.easypoi导出excel版本的问题
使用easypoi导出xlsx时,却使用了xls方式导出。easypoi默认使用HSSF导出,所以在导出xlsx时,需将导出版本类型设置为ExcelType.XSSF
更改以上配置后,导出的文件可正常打开。假设1成立。
2.代码打成jar包后,会压缩源文件,读取文件流方式有问题。
对于模板文件,并非通过easypoi导出的,而是通过Resource读流写流方式。所以假设1此时是不成立的。maven打成jar会将相关文件都进行压缩
1)通过EasyPOI的WorkBook方式进行导出
2)maven忽略对xlsx文件的压缩
- 字符编码问题。
虽然假设1,2均成立,但导出的文件都需要经过修复才可正常打开,默认为gbk编码,需要设置为utf-8。
总结:
1.easypoi导出文件, 需要根据导出版本选择XSSF, HSSF形式
2.默认导出模板文件,可通过easypoi的workbook导出或不对xlsx,xls文件进行打包
无论哪种,都需要将编码格式设置为utf-8。因为office是使用utf-8编码的,打开gbk编码的文件会出现异常,而wps对此类进行了兼容处理。