From 346a3cf7f154af951665b1a7bf734eed01bb48bc Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 26 十二月 2022 11:11:14 +0800 Subject: [PATCH] update 重构 ExcelUtil 全导出方法支持 OutputStream 流导出 不局限于 response --- ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 164 +++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 113 insertions(+), 51 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 3ff8fec..211c621 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -24,6 +24,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Collection; import java.util.List; @@ -84,7 +85,13 @@ * @param response 鍝嶅簲浣� */ public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response) { - exportExcel(list, sheetName, clazz, false, response); + try { + resetResponse(sheetName, response); + ServletOutputStream os = response.getOutputStream(); + exportExcel(list, sheetName, clazz, false, os); + } catch (IOException e) { + throw new RuntimeException("瀵煎嚭Excel寮傚父"); + } } /** @@ -100,21 +107,46 @@ try { resetResponse(sheetName, response); ServletOutputStream os = response.getOutputStream(); - ExcelWriterSheetBuilder builder = EasyExcel.write(os, clazz) - .autoCloseStream(false) - // 鑷姩閫傞厤 - .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) - // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 - .registerConverter(new ExcelBigNumberConvert()) - .sheet(sheetName); - if (merge) { - // 鍚堝苟澶勭悊鍣� - builder.registerWriteHandler(new CellMergeStrategy(list, true)); - } - builder.doWrite(list); + exportExcel(list, sheetName, clazz, merge, os); } catch (IOException e) { throw new RuntimeException("瀵煎嚭Excel寮傚父"); } + } + + /** + * 瀵煎嚭excel + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param clazz 瀹炰綋绫� + * @param os 杈撳嚭娴� + */ + public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, OutputStream os) { + exportExcel(list, sheetName, clazz, false, os); + } + + /** + * 瀵煎嚭excel + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param clazz 瀹炰綋绫� + * @param merge 鏄惁鍚堝苟鍗曞厓鏍� + * @param os 杈撳嚭娴� + */ + public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, boolean merge, OutputStream os) { + ExcelWriterSheetBuilder builder = EasyExcel.write(os, clazz) + .autoCloseStream(false) + // 鑷姩閫傞厤 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 + .registerConverter(new ExcelBigNumberConvert()) + .sheet(sheetName); + if (merge) { + // 鍚堝苟澶勭悊鍣� + builder.registerWriteHandler(new CellMergeStrategy(list, true)); + } + builder.doWrite(list); } /** @@ -125,29 +157,44 @@ * 渚嬪: excel/temp.xlsx * 閲嶇偣: 妯℃澘鏂囦欢蹇呴』鏀剧疆鍒板惎鍔ㄧ被瀵瑰簲鐨� resource 鐩綍涓� * @param data 妯℃澘闇�瑕佺殑鏁版嵁 + * @param response 鍝嶅簲浣� */ public static void exportTemplate(List<Object> data, String filename, String templatePath, HttpServletResponse response) { try { resetResponse(filename, response); - ClassPathResource templateResource = new ClassPathResource(templatePath); - ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) - .withTemplate(templateResource.getStream()) - .autoCloseStream(false) - // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 - .registerConverter(new ExcelBigNumberConvert()) - .build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - if (CollUtil.isEmpty(data)) { - throw new IllegalArgumentException("鏁版嵁涓虹┖"); - } - // 鍗曡〃澶氭暟鎹鍑� 妯℃澘鏍煎紡涓� {.灞炴� - for (Object d : data) { - excelWriter.fill(d, writeSheet); - } - excelWriter.finish(); + ServletOutputStream os = response.getOutputStream(); + exportTemplate(data, templatePath, os); } catch (IOException e) { throw new RuntimeException("瀵煎嚭Excel寮傚父"); } + } + + /** + * 鍗曡〃澶氭暟鎹ā鏉垮鍑� 妯℃澘鏍煎紡涓� {.灞炴� + * + * @param templatePath 妯℃澘璺緞 resource 鐩綍涓嬬殑璺緞鍖呮嫭妯℃澘鏂囦欢鍚� + * 渚嬪: excel/temp.xlsx + * 閲嶇偣: 妯℃澘鏂囦欢蹇呴』鏀剧疆鍒板惎鍔ㄧ被瀵瑰簲鐨� resource 鐩綍涓� + * @param data 妯℃澘闇�瑕佺殑鏁版嵁 + * @param os 杈撳嚭娴� + */ + public static void exportTemplate(List<Object> data, String templatePath, OutputStream os) { + ClassPathResource templateResource = new ClassPathResource(templatePath); + ExcelWriter excelWriter = EasyExcel.write(os) + .withTemplate(templateResource.getStream()) + .autoCloseStream(false) + // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 + .registerConverter(new ExcelBigNumberConvert()) + .build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + if (CollUtil.isEmpty(data)) { + throw new IllegalArgumentException("鏁版嵁涓虹┖"); + } + // 鍗曡〃澶氭暟鎹鍑� 妯℃澘鏍煎紡涓� {.灞炴� + for (Object d : data) { + excelWriter.fill(d, writeSheet); + } + excelWriter.finish(); } /** @@ -158,38 +205,53 @@ * 渚嬪: excel/temp.xlsx * 閲嶇偣: 妯℃澘鏂囦欢蹇呴』鏀剧疆鍒板惎鍔ㄧ被瀵瑰簲鐨� resource 鐩綍涓� * @param data 妯℃澘闇�瑕佺殑鏁版嵁 + * @param response 鍝嶅簲浣� */ public static void exportTemplateMultiList(Map<String, Object> data, String filename, String templatePath, HttpServletResponse response) { try { resetResponse(filename, response); - ClassPathResource templateResource = new ClassPathResource(templatePath); - ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) - .withTemplate(templateResource.getStream()) - .autoCloseStream(false) - // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 - .registerConverter(new ExcelBigNumberConvert()) - .build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - if (CollUtil.isEmpty(data)) { - throw new IllegalArgumentException("鏁版嵁涓虹┖"); - } - for (Map.Entry<String, Object> map : data.entrySet()) { - // 璁剧疆鍒楄〃鍚庣画杩樻湁鏁版嵁 - FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); - if (map.getValue() instanceof Collection) { - // 澶氳〃瀵煎嚭蹇呴』浣跨敤 FillWrapper - excelWriter.fill(new FillWrapper(map.getKey(), (Collection<?>) map.getValue()), fillConfig, writeSheet); - } else { - excelWriter.fill(map.getValue(), writeSheet); - } - } - excelWriter.finish(); + ServletOutputStream os = response.getOutputStream(); + exportTemplateMultiList(data, templatePath, os); } catch (IOException e) { throw new RuntimeException("瀵煎嚭Excel寮傚父"); } } /** + * 澶氳〃澶氭暟鎹ā鏉垮鍑� 妯℃澘鏍煎紡涓� {key.灞炴� + * + * @param templatePath 妯℃澘璺緞 resource 鐩綍涓嬬殑璺緞鍖呮嫭妯℃澘鏂囦欢鍚� + * 渚嬪: excel/temp.xlsx + * 閲嶇偣: 妯℃澘鏂囦欢蹇呴』鏀剧疆鍒板惎鍔ㄧ被瀵瑰簲鐨� resource 鐩綍涓� + * @param data 妯℃澘闇�瑕佺殑鏁版嵁 + * @param os 杈撳嚭娴� + */ + public static void exportTemplateMultiList(Map<String, Object> data, String templatePath, OutputStream os) { + ClassPathResource templateResource = new ClassPathResource(templatePath); + ExcelWriter excelWriter = EasyExcel.write(os) + .withTemplate(templateResource.getStream()) + .autoCloseStream(false) + // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 + .registerConverter(new ExcelBigNumberConvert()) + .build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + if (CollUtil.isEmpty(data)) { + throw new IllegalArgumentException("鏁版嵁涓虹┖"); + } + for (Map.Entry<String, Object> map : data.entrySet()) { + // 璁剧疆鍒楄〃鍚庣画杩樻湁鏁版嵁 + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + if (map.getValue() instanceof Collection) { + // 澶氳〃瀵煎嚭蹇呴』浣跨敤 FillWrapper + excelWriter.fill(new FillWrapper(map.getKey(), (Collection<?>) map.getValue()), fillConfig, writeSheet); + } else { + excelWriter.fill(map.getValue(), writeSheet); + } + } + excelWriter.finish(); + } + + /** * 閲嶇疆鍝嶅簲浣� */ private static void resetResponse(String sheetName, HttpServletResponse response) throws UnsupportedEncodingException { -- Gitblit v1.9.3