فهرست منبع

update Excel写出包装器添加泛型用于限定write入参类型

秋辞未寒 10 ماه پیش
والد
کامیت
424b2ea164

+ 3 - 4
ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java

@@ -212,7 +212,7 @@ public class ExcelUtil {
      * @param options  Excel下拉可选项
      * @param consumer 导出助手消费函数
      */
-    public static <T> void exportExcel(Class<T> headType, OutputStream os, List<DropDownOptions> options, Consumer<ExcelWriterHelper> consumer) {
+    public static <T> void exportExcel(Class<T> headType, OutputStream os, List<DropDownOptions> options, Consumer<ExcelWriterWrapper<T>> consumer) {
         try (ExcelWriter writer = FastExcel.write(os, headType)
             .autoCloseStream(false)
             // 自动适配
@@ -224,9 +224,8 @@ public class ExcelUtil {
             // 添加下拉框操作
             .registerWriteHandler(new ExcelDownHandler(options))
             .build()) {
-            ExcelWriterHelper helper = ExcelWriterHelper.of(writer);
             // 执行消费函数
-            consumer.accept(helper);
+            consumer.accept(ExcelWriterWrapper.of(writer));
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -239,7 +238,7 @@ public class ExcelUtil {
      * @param os       输出流
      * @param consumer 导出助手消费函数
      */
-    public static <T> void exportExcel(Class<T> headType, OutputStream os, Consumer<ExcelWriterHelper> consumer) {
+    public static <T> void exportExcel(Class<T> headType, OutputStream os, Consumer<ExcelWriterWrapper<T>> consumer) {
         exportExcel(headType, os, null, consumer);
     }
 

+ 12 - 20
ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelWriterHelper.java → ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelWriterWrapper.java

@@ -8,41 +8,33 @@ import cn.idev.excel.write.builder.ExcelWriterTableBuilder;
 import cn.idev.excel.write.metadata.WriteSheet;
 import cn.idev.excel.write.metadata.WriteTable;
 import cn.idev.excel.write.metadata.fill.FillConfig;
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 
 import java.util.Collection;
 import java.util.function.Supplier;
 
 /**
- * ExcelWriterHelper Excel写出助手
+ * ExcelWriterWrapper Excel写出包装器
  * <br>
  * 提供了一组与 ExcelWriter 一一对应的写出方法,避免直接提供 ExcelWriter 而导致的一些不可控问题(比如提前关闭了IO流等)
  *
- *
- * @see ExcelWriter
  * @author 秋辞未寒
+ * @see ExcelWriter
  */
-@RequiredArgsConstructor
-public class ExcelWriterHelper {
-
-    @Getter(AccessLevel.PRIVATE)
-    private final ExcelWriter excelWriter;
+public record ExcelWriterWrapper<T>(ExcelWriter excelWriter) {
 
-    public void write(Collection<?> data, WriteSheet writeSheet) {
+    public void write(Collection<T> data, WriteSheet writeSheet) {
         excelWriter.write(data, writeSheet);
     }
 
-    public void write(Supplier<Collection<?>> supplier, WriteSheet writeSheet) {
-        excelWriter.write(supplier, writeSheet);
+    public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet) {
+        excelWriter.write(supplier.get(), writeSheet);
     }
 
-    public void write(Collection<?> data, WriteSheet writeSheet, WriteTable writeTable) {
+    public void write(Collection<T> data, WriteSheet writeSheet, WriteTable writeTable) {
         excelWriter.write(data, writeSheet, writeTable);
     }
 
-    public void write(Supplier<Collection<?>> supplier, WriteSheet writeSheet, WriteTable writeTable) {
+    public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet, WriteTable writeTable) {
         excelWriter.write(supplier.get(), writeSheet, writeTable);
     }
 
@@ -67,13 +59,13 @@ public class ExcelWriterHelper {
     }
 
     /**
-     * 创建一个 ExcelWriterHelper
+     * 创建一个 ExcelWriterWrapper
      *
      * @param excelWriter ExcelWriter
-     * @return ExcelWriterHelper
+     * @return ExcelWriterWrapper
      */
-    public static ExcelWriterHelper of(ExcelWriter excelWriter) {
-        return new ExcelWriterHelper(excelWriter);
+    public static  <T> ExcelWriterWrapper<T> of(ExcelWriter excelWriter) {
+        return new ExcelWriterWrapper<>(excelWriter);
     }
 
     // -------------------------------- sheet start

+ 7 - 8
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ExportExcelServiceImpl.java

@@ -9,10 +9,9 @@ import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.constant.SystemConstants;
 import org.dromara.common.core.utils.StreamUtils;
 import org.dromara.common.core.utils.file.FileUtils;
-import org.dromara.common.excel.core.CellMergeStrategy;
 import org.dromara.common.excel.core.DropDownOptions;
 import org.dromara.common.excel.utils.ExcelUtil;
-import org.dromara.common.excel.utils.ExcelWriterHelper;
+import org.dromara.common.excel.utils.ExcelWriterWrapper;
 import org.dromara.demo.domain.vo.ExportDemoVo;
 import org.dromara.demo.service.IExportExcelService;
 import org.springframework.stereotype.Service;
@@ -246,7 +245,7 @@ public class ExportExcelServiceImpl implements IExportExcelService {
         FileUtils.setAttachmentResponseHeader(response, filename);
         response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
 
-        ExcelUtil.exportExcel(ExportDemoVo.class, response.getOutputStream(), helper -> {
+        ExcelUtil.exportExcel(ExportDemoVo.class, response.getOutputStream(), wrapper -> {
             // 创建表格数据,业务中一般通过数据库查询
             List<ExportDemoVo> excelDataList = new ArrayList<>();
             for (int i = 0; i < 30; i++) {
@@ -264,13 +263,13 @@ public class ExportExcelServiceImpl implements IExportExcelService {
             }
 
             // 创建表格
-            WriteSheet sheet = ExcelWriterHelper.sheetBuilder("自定义导出demo")
+            WriteSheet sheet = ExcelWriterWrapper.sheetBuilder("自定义导出demo")
                 // 合并单元格
                 // .registerWriteHandler(new CellMergeStrategy(excelDataList, true))
                 .build();
 
 
-            helper.write(excelDataList, sheet);
+            wrapper.write(excelDataList, sheet);
 
             List<ExportDemoVo> excelDataList2 = new ArrayList<>();
             for (int i = 0; i < 20; i++) {
@@ -288,11 +287,11 @@ public class ExportExcelServiceImpl implements IExportExcelService {
                 excelDataList2.add(everyRowData);
             }
 
-            helper.write(excelDataList2, sheet);
+            wrapper.write(excelDataList2, sheet);
 
             // 或者在同一个excel中创建多个表格
-            // WriteSheet sheet2 = ExcelWriterHelper.sheetBuilder("自定义导出demo2").build();
-            // helper.write(excelDataList2, sheet2);
+            // WriteSheet sheet2 = ExcelWriterWrapper.sheetBuilder("自定义导出demo2").build();
+            // wrapper.write(excelDataList2, sheet2);
         });
     }
 }