// 導出EXCEL
public void exportTable(ReqData req, HttpServletRequest request, HttpServletResponse response) {
// 生成sheetName<-->sheetData數據,業務不同,實現不同
Map<String, ExportTableExcelRsp> excelRsp = getExportExcel(req);
List<Map<String, Object>> list = new ArrayList<>();
for (Map.Entry<String, ExportTableExcelRsp> rspEntry : excelRsp.entrySet()) {
String sheetName = rspEntry.getKey();
ExportTableExcelRsp rsp = rspEntry.getValue();
List<ExcelExportEntity> entities = new ArrayList<>();
List<HashMap<String, String>> header = rsp.getHeader();
List<HashMap<String, String>> body = rsp.getBody();
for (HashMap<String, String> h : header) {
String name = null;
String key = null;
// 初次調換key和value的位置
for (String value : h.values()) {
if (CommonUtil.checkStringContainChinese(value)) {
name = value;
} else {
key = value;
}
}
entities.add(new ExcelExportEntity(name, key));
}
Map<String, Object> map = new HashMap<>(3);
map.put("title", new ExportParams(null, sheetName, ExcelType.XSSF));
map.put("entity", entities);
map.put("data", body);
list.add(map);
}
try {
Workbook workbook = exportExcel(list, ExcelType.XSSF);
String formatTime = DateUtil.formatNow("yyyy-MM-dd");
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/x-download");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + "data " + formatTime + ".xlsx");
workbook.write(outputStream);
outputStream.close();
} catch (IOException e) {
throw new BusinessException("Excel導出失敗");
}
}
public static Workbook exportExcel(List<Map<String, Object>> list, ExcelType type) {
Workbook workbook = getWorkbook(type, 0);
Iterator var3 = list.iterator();
while(var3.hasNext()) {
Map<String, Object> map = (Map)var3.next();
ExcelExportService service = new ExcelExportService();
service.createSheetForMap(workbook, (ExportParams)map.get("title"), (List<ExcelExportEntity>)map.get("entity"), (Collection<?>)map.get("data"));
}
return workbook;
}
private static Workbook getWorkbook(ExcelType type, int size) {
if (ExcelType.HSSF.equals(type)) {
return new HSSFWorkbook();
} else {
return (size < 100000 ? new XSSFWorkbook() : new SXSSFWorkbook());
}
}
// 動態表的實體
public class ExportTableExcelRsp {
@ApiModelProperty(value = "表頭")
private List<HashMap<String, String>> header;
@ApiModelProperty(value = "表體")
private List<HashMap<String, String>> body;
}