由于代碼中使用了Apache poi的excel導(dǎo)出,但是自己想使用easyExcel發(fā)現(xiàn)jar沖突。easyExcel默認(rèn)使用poi 3.17的包,Apache poi使用3.9的包。我把easyExcel的依賴升級到3.9提示class找不到。折騰了很久,決定采用Hutools去封裝個導(dǎo)出工具類。
/**
* 導(dǎo)出文件
* @param request
* @param response
* @param fileName 文件名
* @param sheetName
* @param headers 表頭
* @param data 數(shù)據(jù)
* @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();
//通過工具類創(chuàng)建writer
try {
ExcelWriter writer = ExcelUtil.getBigWriter();
//設(shè)置sheet的名稱
writer.renameSheet(sheetName);
//設(shè)置head的名稱, 此時的順尋就是導(dǎo)出的順序, key就是RecordInfoDetailsDTO的屬性名稱, value就是別名
headers.entrySet().forEach(entry->{
//這個添加順序和導(dǎo)出順序相同
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) {
//如果導(dǎo)出異常,則生成一個空的文件
log.info("######導(dǎo)出 excel異常 :{}", e.getMessage());
}
}