From b20fd29dc3864405af4afa0aeb99d13d74fbfcdc Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 21 三月 2024 15:07:44 +0800 Subject: [PATCH] 解决导出xls异常 --- src/main/java/com/lf/server/helper/ExcelHelper.java | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 119 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/lf/server/helper/ExcelHelper.java b/src/main/java/com/lf/server/helper/ExcelHelper.java index cd93f3e..5589cdd 100644 --- a/src/main/java/com/lf/server/helper/ExcelHelper.java +++ b/src/main/java/com/lf/server/helper/ExcelHelper.java @@ -1,9 +1,127 @@ package com.lf.server.helper; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.enums.WriteDirectionEnum; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.read.metadata.ReadSheet; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.excel.write.metadata.fill.FillWrapper; +import com.lf.server.annotation.ExcelHead; + +import java.util.*; + /** * Excel甯姪绫� * @author WWW */ public class ExcelHelper { - // + /** + * 璇诲彇Excel + * + * @param pathName 鏂囦欢璺緞 + * @param <T> 娉涘瀷绫� + * @return 娉涘瀷绫婚泦鍚� + */ + public static <T> List<T> readExcel(Class<?> clazz, String pathName) { + ExcelHead head = getExcelHead(clazz); + int headRowNumber = head == null ? 1 : head.headRows(); + String[] strs = null == head || StringHelper.isEmpty(head.excludeSheets()) ? null : head.excludeSheets().split(","); + List<String> excludeSheets = null == strs ? null : Arrays.asList(strs); + + List<T> list = new ArrayList<T>(); + ExcelReader reader = EasyExcel.read(pathName, clazz, new AnalysisEventListener<T>() { + @Override + public void invoke(T t, AnalysisContext context) { + list.add(t); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + // + } + }).headRowNumber(headRowNumber).build(); + + List<ReadSheet> sheets = reader.excelExecutor().sheetList(); + for (ReadSheet sheet : sheets) { + if (strs != null && excludeSheets.contains(sheet.getSheetName())) { + continue; + } + + reader.read(sheet); + } + reader.finish(); + + return list; + } + + /** + * 鑾峰彇Excel澶存敞瑙g被 + * + * @param clazz Class + * @param <T> 娉涘瀷绫� + * @return 澶磋鏁� + */ + public static <T> ExcelHead getExcelHead(Class<?> clazz) { + ExcelHead head = clazz.getAnnotation(ExcelHead.class); + + return head; + } + + /** + * 鍐欏叆Excel妯℃澘 + * + * @param source 婧愭枃浠讹紙妯℃澘锛� + * @param target 鐩綍鏂囦欢 + * @param map 閿�煎Map + * @param listMap 鍒楄〃Map + */ + public static <T> void writeToTemplate(String source, String target, Map<String, Object> map, Map<String, List<T>> listMap) { + // 鏍规嵁妯℃澘鍐欏叆鏁版嵁锛屽鏋滅洰鏍囨枃浠朵笉瀛樺湪锛屽垯鑷姩鍒涘缓鏂囦欢 + ExcelWriter excelWriter = EasyExcel.write(target).withTemplate(source).build(); + + // 鍦ㄥ伐浣滅翱0涓啓鍏ユ暟鎹紝濡傛灉妯℃澘涓笉瀛樺湪缁冧範宸ヤ綔绨匡紝鍒欎細鍦ㄧ洰鏍囨枃浠朵腑鑷姩鍒涘缓 + WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); + + // 鍨傜洿鍐欏叆鏁版嵁锛屽鏋滆姘村钩鍐欏叆锛屽皢VERTICAL鏇挎崲涓篐ORIZONTAL + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); + + // 鍐欏叆鏁版嵁 + if (null != map && map.size() > 0) { + excelWriter.fill(map, writeSheet); + } + if (null != listMap && listMap.size() > 0) { + listMap.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet)); + } + + // 缁撴潫鍐欏叆 + excelWriter.finish(); + } + + /** + * 鍐欏叆Excel妯℃澘 + * + * @param source 婧愭枃浠讹紙妯℃澘锛� + * @param target 鐩綍鏂囦欢 + * @param map 鏁版嵁婧� + */ + public static <T> void writeToTemplate(String source, String target, Map<String, List<T>> map) { + // 鏍规嵁妯℃澘鍐欏叆鏁版嵁锛屽鏋滅洰鏍囨枃浠朵笉瀛樺湪锛屽垯鑷姩鍒涘缓鏂囦欢 + ExcelWriter excelWriter = EasyExcel.write(target).withTemplate(source).build(); + + // 鍦ㄥ伐浣滅翱0涓啓鍏ユ暟鎹紝濡傛灉妯℃澘涓笉瀛樺湪缁冧範宸ヤ綔绨匡紝鍒欎細鍦ㄧ洰鏍囨枃浠朵腑鑷姩鍒涘缓 + WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); + + // 鍨傜洿鍐欏叆鏁版嵁锛屽鏋滆姘村钩鍐欏叆锛屽皢VERTICAL鏇挎崲涓篐ORIZONTAL + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); + + // 鍐欏叆鏁版嵁 + map.forEach((k, v) -> excelWriter.fill(new FillWrapper(k, v), fillConfig, writeSheet)); + + // 缁撴潫鍐欏叆 + excelWriter.finish(); + } } -- Gitblit v1.9.3