springboot使用使用poi生成excel(使用反射获取数据pojo属性)
业务场景
系统导出数据较多,由前端查询后进行导出下载存在性能问题,故后端进行数据查询后生成excel,前端直接调用导出接口进行下载。考虑到通用性(不同业务场景下导出数据不同),使用反射获取传输数据的pojo属性,并匹配传入参数中需导出字段输出excel文件流。
依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
Excel生成工具类
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
/**
* excel下载工具类
*
* @author wangyutian
* @version 2.0
* @date 2021/10/18
*/
@Slf4j
public class ExcelDownloadUtil {
/**
* excel下载
*
* <p>1.将传入数据导出excle存储到临时文件
* <p>2.返回临时文件流
*
* @param list 需下载数据
* @param columns excel中展示字段
* @param columnHeaders excel表头,与excel中展示字段顺序对应
* @return byte[]
* @author yutian
* @date 2021/10/18
*/
public byte[] excelDownload(List<?> list, List<String> columns, List<String> columnHeaders) throws Exception {
// 初始化返回字节数组
byte[] fileData = new byte[0];
// 传入参数为空,直接返回空的流
if (list == null || list.size() == 0) {
log.info("传入数据列表为空");
return fileData;
}
if (columns == null || columns.size() == 0) {
log.in