由于代码中使用了Apache poi的excel导出,但是自己想使用easyExcel发现jar冲突。easyExcel默认使用poi 3.17的包,Apache poi使用3.9的包。我把easyExcel的依赖升级到3.9提示class找不到。折腾了很久,决定采用Hutools去封装个导出工具类。
/**
* 导出文件
* @param request
* @param response
* @param fileName 文件名
* @param sheetName
* @param headers 表头
* @param data 数据
* @param <T>
*/
public static <T> void exportExcelByHuTools(HttpServletRequest request,
HttpServletResponse response,
String fileName,
String sheetName,
Map<String,String> headers,
List<T> data) {
long startTime = System.currentTimeMillis();
//通过工具类创建writer
try {
ExcelWriter writer = ExcelUtil.getBigWriter();
//设置sheet的名称
writer.renameSheet(sheetName);
//设置head的名称, 此时的顺寻就是导出的顺序, key就是RecordInfoDetailsDTO的属性名称, value就是别名
headers.entrySet().forEach(entry->{
//这个添加顺序和导出顺序相同
writer.addHeaderAlias(entry.getKey(),entry.getValue());
});
writer.write(data, true);
writer.setOnlyAlias(true);
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
//中文名称需要特殊处理
writer.flush(response.getOutputStream());
writer.close();
long endTime = System.currentTimeMillis();
System.out.println("hutool 写入记录耗时 " + (endTime - startTime) / 1000 + "秒");
} catch (Exception e) {
//如果导出异常,则生成一个空的文件
log.info("######导出 excel异常 :{}", e.getMessage());
}
}