easypoi生成數據爲鍵值對動態多sheet的excel


// 導出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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章