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