mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-23 19:56:40 +08:00
update Excel写出包装器添加泛型用于限定write入参类型
This commit is contained in:
parent
7bb4838132
commit
424b2ea164
@ -212,7 +212,7 @@ public class ExcelUtil {
|
|||||||
* @param options Excel下拉可选项
|
* @param options Excel下拉可选项
|
||||||
* @param consumer 导出助手消费函数
|
* @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)
|
try (ExcelWriter writer = FastExcel.write(os, headType)
|
||||||
.autoCloseStream(false)
|
.autoCloseStream(false)
|
||||||
// 自动适配
|
// 自动适配
|
||||||
@ -224,9 +224,8 @@ public class ExcelUtil {
|
|||||||
// 添加下拉框操作
|
// 添加下拉框操作
|
||||||
.registerWriteHandler(new ExcelDownHandler(options))
|
.registerWriteHandler(new ExcelDownHandler(options))
|
||||||
.build()) {
|
.build()) {
|
||||||
ExcelWriterHelper helper = ExcelWriterHelper.of(writer);
|
|
||||||
// 执行消费函数
|
// 执行消费函数
|
||||||
consumer.accept(helper);
|
consumer.accept(ExcelWriterWrapper.of(writer));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@ -239,7 +238,7 @@ public class ExcelUtil {
|
|||||||
* @param os 输出流
|
* @param os 输出流
|
||||||
* @param consumer 导出助手消费函数
|
* @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);
|
exportExcel(headType, os, null, consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,41 +8,33 @@ import cn.idev.excel.write.builder.ExcelWriterTableBuilder;
|
|||||||
import cn.idev.excel.write.metadata.WriteSheet;
|
import cn.idev.excel.write.metadata.WriteSheet;
|
||||||
import cn.idev.excel.write.metadata.WriteTable;
|
import cn.idev.excel.write.metadata.WriteTable;
|
||||||
import cn.idev.excel.write.metadata.fill.FillConfig;
|
import cn.idev.excel.write.metadata.fill.FillConfig;
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ExcelWriterHelper Excel写出助手
|
* ExcelWriterWrapper Excel写出包装器
|
||||||
* <br>
|
* <br>
|
||||||
* 提供了一组与 ExcelWriter 一一对应的写出方法,避免直接提供 ExcelWriter 而导致的一些不可控问题(比如提前关闭了IO流等)
|
* 提供了一组与 ExcelWriter 一一对应的写出方法,避免直接提供 ExcelWriter 而导致的一些不可控问题(比如提前关闭了IO流等)
|
||||||
*
|
*
|
||||||
*
|
|
||||||
* @see ExcelWriter
|
|
||||||
* @author 秋辞未寒
|
* @author 秋辞未寒
|
||||||
|
* @see ExcelWriter
|
||||||
*/
|
*/
|
||||||
@RequiredArgsConstructor
|
public record ExcelWriterWrapper<T>(ExcelWriter excelWriter) {
|
||||||
public class ExcelWriterHelper {
|
|
||||||
|
|
||||||
@Getter(AccessLevel.PRIVATE)
|
public void write(Collection<T> data, WriteSheet writeSheet) {
|
||||||
private final ExcelWriter excelWriter;
|
|
||||||
|
|
||||||
public void write(Collection<?> data, WriteSheet writeSheet) {
|
|
||||||
excelWriter.write(data, writeSheet);
|
excelWriter.write(data, writeSheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(Supplier<Collection<?>> supplier, WriteSheet writeSheet) {
|
public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet) {
|
||||||
excelWriter.write(supplier, 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);
|
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);
|
excelWriter.write(supplier.get(), writeSheet, writeTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,13 +59,13 @@ public class ExcelWriterHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个 ExcelWriterHelper
|
* 创建一个 ExcelWriterWrapper
|
||||||
*
|
*
|
||||||
* @param excelWriter ExcelWriter
|
* @param excelWriter ExcelWriter
|
||||||
* @return ExcelWriterHelper
|
* @return ExcelWriterWrapper
|
||||||
*/
|
*/
|
||||||
public static ExcelWriterHelper of(ExcelWriter excelWriter) {
|
public static <T> ExcelWriterWrapper<T> of(ExcelWriter excelWriter) {
|
||||||
return new ExcelWriterHelper(excelWriter);
|
return new ExcelWriterWrapper<>(excelWriter);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------- sheet start
|
// -------------------------------- sheet start
|
@ -9,10 +9,9 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.dromara.common.core.constant.SystemConstants;
|
import org.dromara.common.core.constant.SystemConstants;
|
||||||
import org.dromara.common.core.utils.StreamUtils;
|
import org.dromara.common.core.utils.StreamUtils;
|
||||||
import org.dromara.common.core.utils.file.FileUtils;
|
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.core.DropDownOptions;
|
||||||
import org.dromara.common.excel.utils.ExcelUtil;
|
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.domain.vo.ExportDemoVo;
|
||||||
import org.dromara.demo.service.IExportExcelService;
|
import org.dromara.demo.service.IExportExcelService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -246,7 +245,7 @@ public class ExportExcelServiceImpl implements IExportExcelService {
|
|||||||
FileUtils.setAttachmentResponseHeader(response, filename);
|
FileUtils.setAttachmentResponseHeader(response, filename);
|
||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
|
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<>();
|
List<ExportDemoVo> excelDataList = new ArrayList<>();
|
||||||
for (int i = 0; i < 30; i++) {
|
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))
|
// .registerWriteHandler(new CellMergeStrategy(excelDataList, true))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
helper.write(excelDataList, sheet);
|
wrapper.write(excelDataList, sheet);
|
||||||
|
|
||||||
List<ExportDemoVo> excelDataList2 = new ArrayList<>();
|
List<ExportDemoVo> excelDataList2 = new ArrayList<>();
|
||||||
for (int i = 0; i < 20; i++) {
|
for (int i = 0; i < 20; i++) {
|
||||||
@ -288,11 +287,11 @@ public class ExportExcelServiceImpl implements IExportExcelService {
|
|||||||
excelDataList2.add(everyRowData);
|
excelDataList2.add(everyRowData);
|
||||||
}
|
}
|
||||||
|
|
||||||
helper.write(excelDataList2, sheet);
|
wrapper.write(excelDataList2, sheet);
|
||||||
|
|
||||||
// 或者在同一个excel中创建多个表格
|
// 或者在同一个excel中创建多个表格
|
||||||
// WriteSheet sheet2 = ExcelWriterHelper.sheetBuilder("自定义导出demo2").build();
|
// WriteSheet sheet2 = ExcelWriterWrapper.sheetBuilder("自定义导出demo2").build();
|
||||||
// helper.write(excelDataList2, sheet2);
|
// wrapper.write(excelDataList2, sheet2);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user