依赖
版本
<hutool.version>5.7.20</hutool.version>
<poi.ooxml>4.1.2</poi.ooxml>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.ooxml}</version>
</dependency>
工具类
@Log4j2
public class ExportUtil {
public static void exportTestByExcelWriter(List<String> Head,LinkedHashMap<String,String> mapHead,
List<JSONObject> list,String excelName,
HttpServletResponse response) {
ServletOutputStream out = null;
try {
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.writeHeadRow(Head);
writer.write(list);
if (ObjectUtil.isNull(mapHead)) {
unionHeader(Head, mapHead);
writer.setCurrentRow(0);
writer.writeHeadRow(Head);
}
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(excelName, "UTF-8") + ".xlsx");
response.setHeader("Access-Control-Expose-Headers", "fileName");
response.setHeader("fileName", URLEncoder.encode(excelName, "UTF-8") + ".xlsx");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setContentType("application/octet-stream");
response.setStatus(200);
out = response.getOutputStream();
writer.flush(out, true);
writer.close();
} catch (Exception e) {
log.info(e);
log.error("下载模板失败:{}", ExceptionUtil.stacktraceToOneLineString(e));
} finally {
IoUtil.close(out);
}
}
private static void unionHeader(List<String> mapHead, LinkedHashMap<String, String> boradHeads) {
for (int i = 0; i < mapHead.size(); i++) {
String key = mapHead.get(i);
String name = boradHeads.get(key);
if (ObjectUtil.isNotNull(name)) {
mapHead.set(i, name);
}
}
}
public static void exportExcel(String sheetName, List<String> column, List<Map<String,Object>> data,
HttpServletRequest request, HttpServletResponse response){
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfWorkbook.createSheet(sheetName);
HSSFRow headRow = sheet.createRow(0);
for (int i = 0; i < column.size(); i++){
headRow.createCell(i).setCellValue(column.get(i));
}
for (int i = 0; i < data.size(); i++) {
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
for (int x = 0; x < column.size(); x++) {
dataRow.createCell(x).setCellValue(data.get(i).get(column.get(x))==null?"":data.get(i).get(column.get(x)).toString());
}
}
response.setContentType("application/vnd.ms-excel");
try {
String agent=request.getHeader("user-agent");
String filename=sheetName+".xls";
if (agent.contains("Firefox")) {
filename = "=?UTF-8?B?"
+ new BASE64Encoder().encode(filename.getBytes("utf-8"))
+ "?=";
filename = filename.replaceAll("\r\n", "");
} else {
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+"," ");
}
response.setHeader("Content-Disposition","attachment;filename="+filename);
hssfWorkbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用
@Override
public void exportCheckList(QueryListVO queryListVO, HttpServletResponse response) {
List<CheckStatusVO> data = checkStatusMapper.queryCheckList( queryListVO.getPageSize(),count.intValue(), queryListVO);
if (data.size() <= 0) {
return;
}
List<String> headList = Arrays.stream(data .get(0).getClass().getDeclaredFields()).map(Field::getName).collect(Collectors.toList());
LinkedHashMap<String, String> headMap = new LinkedHashMap<>();
for (String headName : headList) {
switch (headName) {
case "chectDataId":
headMap.put(headName,"任务编码");
break;
case "applicationName":
headMap.put(headName,"应用名称");
break;
case "userName":
headMap.put(headName,"提交用户");
break;
case "status":
headMap.put(headName,"状态");
break;
case "createTime":
headMap.put(headName,"开始时间");
break;
case "updateTime":
headMap.put(headName,"结束时间");
break;
case "exceptionDetails":
headMap.put(headName,"失败明细");
break;
}
}
List<JSONObject> jsonList = JsonUtil.toList(JsonUtil.toJSONString(list), JSONObject.class);
ExportUtil.exportTestByExcelWriter(headList,headMap,jsonList,StringPool.Export.DM_FACT_SHARE_DETAIL,response);
}
使用 不修改title别名测试
@Override
public void reportLogByRoleImportPvUV(ReportLogDTO reportLogDTO, HttpServletRequest request, HttpServletResponse response) {
try {
List<Map<String, Object>> mapList = reportLogByRolePvUv(reportLogDTO);
if (CollectionUtil.isEmpty(mapList)) {
return;
}
List<String> headList = new ArrayList<>();
headList.add("Role");
headList.add("Report Name");
headList.add("Role");
headList.add("PV");
headList.add("UV");
ExportUtil.exportExcel("报表访问量访问明细-角色",headList,mapList,request,response);
}catch (Exception e) {
log.error("导出失败:{}", ExceptionUtil.stacktraceToOneLineString(e));
}
}