From ff76df9ae0f2383db903bab3efc6ef1223d0d071 Mon Sep 17 00:00:00 2001 From: liyang <liyang1987jay@163.com> Date: 星期三, 18 十二月 2024 17:27:16 +0800 Subject: [PATCH] 增加导出模板必填、备注 增加单独的导出模板 方法 --- ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 93 insertions(+), 0 deletions(-) diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java index a6c14ad..fa1fb90 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java @@ -16,14 +16,20 @@ import lombok.NoArgsConstructor; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.file.FileUtils; +import org.dromara.common.core.utils.reflect.ReflectUtils; +import org.dromara.common.excel.annotation.ExcelNotation; +import org.dromara.common.excel.annotation.ExcelRequired; import org.dromara.common.excel.convert.ExcelBigNumberConvert; import org.dromara.common.excel.core.*; +import org.dromara.common.excel.handler.DataWriteHandler; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -433,4 +439,91 @@ return IdUtil.fastSimpleUUID() + "_" + filename + ".xlsx"; } + /** + * 鑾峰彇蹇呭~鍒桵ap + * + * @param clazz 绫籧lass + * @return java.util.Map<java.lang.Integer, java.lang.Short> + * @author SunLingDa + * @date 2022/11/3 13:23 + */ + private static Map<Integer, Short> getRequiredMap(Class<?> clazz) { + Map<Integer, Short> requiredMap = new HashMap<>(); + Field[] fields = clazz.getDeclaredFields(); + // 妫�鏌� fields 鏁扮粍鏄惁涓虹┖ + if (fields.length == 0) { + return requiredMap; + } + Field[] filteredFields = ReflectUtils.getFields(clazz, field -> !"serialVersionUID".equals(field.getName())); + + for (int i = 0; i < filteredFields.length; i++) { + Field field = filteredFields[i]; + if (!field.isAnnotationPresent(ExcelRequired.class)) { + continue; + } + ExcelRequired excelRequired = field.getAnnotation(ExcelRequired.class); + int columnIndex = excelRequired.index() == -1 ? i : excelRequired.index(); + requiredMap.put(columnIndex, excelRequired.fontColor().getIndex()); + } + return requiredMap; + } + + /** + * 鑾峰彇鎵规敞Map + * + * @param clazz 绫籧lass + * @return java.util.Map<java.lang.Integer, java.lang.String> + * @author SunLingDa + * @date 2022/11/3 13:24 + */ + private static Map<Integer, String> getNotationMap(Class<?> clazz) { + Map<Integer, String> notationMap = new HashMap<>(); + Field[] fields = clazz.getDeclaredFields(); + // 妫�鏌� fields 鏁扮粍鏄惁涓虹┖ + if (fields.length == 0) { + return notationMap; + } + Field[] filteredFields = ReflectUtils.getFields(clazz, field -> !"serialVersionUID".equals(field.getName())); + for (int i = 0; i < filteredFields.length; i++) { + Field field = filteredFields[i]; + if (!field.isAnnotationPresent(ExcelNotation.class)) { + continue; + } + ExcelNotation excelNotation = field.getAnnotation(ExcelNotation.class); + int columnIndex = excelNotation.index() == -1 ? i : excelNotation.index(); + notationMap.put(columnIndex, excelNotation.value()); + } + return notationMap; + } + public static <T> void exportExcelRequire(List<T> list, String sheetName, Class<T> clazz,HttpServletResponse response) { + exportExcelTemplate(list,sheetName,clazz,response); + } + /** + * 瀵煎嚭excel妯℃澘 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param clazz 瀹炰綋绫� + * @param response 鍝嶅簲浣� + */ + public static <T> void exportExcelTemplate(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response) { + try { + Map<Integer, Short> requiredMap = getRequiredMap(clazz); + Map<Integer, String> notationMap = getNotationMap(clazz); + resetResponse(sheetName, response); + ServletOutputStream os = response.getOutputStream(); + DataWriteHandler writeHandler = new DataWriteHandler(notationMap, requiredMap); + ExcelWriterSheetBuilder builder = EasyExcel.write(os, clazz) + .autoCloseStream(false) + // 鑷姩閫傞厤 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .registerWriteHandler(writeHandler) + // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 + .registerConverter(new ExcelBigNumberConvert()) + .sheet(sheetName); + builder.doWrite(list); + } catch (IOException e) { + throw new RuntimeException("瀵煎嚭Excel寮傚父"); + } + } } -- Gitblit v1.9.3