Springboot 导出Excel文件方式对比与注意事项
- Excel导出系列目录:
- 为什么不导出.xls后缀的文件?
- EasyExcel导出xls后缀文件
- POI导出xls后缀文件
- POI导出与EasyExcel导出相比哪种方式最优呢?
- POI导出与EasyExcel导出两种方式有没有需要注意的坑呢?
- 服务过滤器踩坑
- XSSFClientAnchor参数配置踩坑
- HSSFClientAnchor参数配置踩坑
Excel导出系列目录:
【Springboot 使用EasyExcel导出Excel文件】
【Springboot 使用POI导出Excel文件】
【Springboot 导出Excel文件方式对比与注意事项】
前两篇中,我们使用EasyExcel、POI
两种常用的方式实现Excel的导出功能,并且最后我留了三个问题,这次讲解一下:
- 为什么不导出
.xls后缀
的文件? - POI导出与EasyExcel导出相比哪种方式最优呢?
- POI导出与EasyExcel导出两种方式有没有需要注意的坑呢?
为什么不导出.xls后缀的文件?
这个一般没有强制,不管是在工作中,一般不会强制让你生成的Excel文件后缀。如果需要导出.xls后缀
的文件,那就见以下代码,修改一下。
EasyExcel导出xls后缀文件
以【Springboot 使用EasyExcel导出Excel文件】文章为例
将导出的文件名修改为
.xls后缀
即可。
POI导出xls后缀文件
以【Springboot 使用POI导出Excel文件】文章为例
- 将导出的文件名修改为
.xls后缀
。 - 将
XSSF
前缀的类,修改为HSSF
前缀。 - 插入图片使用的
XSSFDrawing
类,修改为HSSFPatriarch
类 - 插入图片时使用的
XSSFClientAnchor
、HSSFClientAnchor
中的参数有极大的区别,需要特殊注意
,具体见下文描述。
POI导出与EasyExcel导出相比哪种方式最优呢?
情况 | 代码实现 | 扩展性 |
---|---|---|
EasyExcel | 简单 | 易扩展 |
POI | 复杂 | 不易扩展 |
我感觉如果导出的全是文字
或者对导出内容样式没有极高的要求
,可以优先选EasyExcel导出
,否则,选择POI导出
。
POI导出与EasyExcel导出两种方式有没有需要注意的坑呢?
- 因为服务中的前置过滤器处理,导致响应的二进制流
下载后无法正常打开文件
。 - 上文中,POI导出时插入图片使用的
XSSFClientAnchor
、HSSFClientAnchor
类一定要注意他们的参数差异
。
服务过滤器踩坑
为了能在调用服务接口的时候打印出响应体内容,大家一般会继承HttpServletRequestWrapper类,将响应内容取出并打印,但是这个会对响应内容做处理并输出,如果是返回二进制流数据,就会出现问题,我当前的处理方式是如果请求url属于导出接口,那就不使用继承HttpServletRequestWrapper的类接收响应
XSSFClientAnchor参数配置踩坑
用于在xlsx后缀
文件中插入图片并可以在单元格中定位图片位置。
如果想实现文章中的图片所在单元格有内边距效果,代码如下:
// row=行号(从0开始),col=列号(从0开始)
XSSFClientAnchor anchor = new XSSFClientAnchor(100000, 100000, -100000, -100000, (short) col, row, (short) col + 1, row + 1);
HSSFClientAnchor参数配置踩坑
用于在xls后缀
文件中插入图片并可以在单元格中定位图片位置。
如果想实现文章中的图片所在单元格有内边距效果,代码如下:
// row=行号(从0开始),col=列号(从0开始)
HSSFClientAnchor anchor = new HSSFClientAnchor(100, 25, 900, 240, (short) col, row, (short) col, row);