From 34396de03a38fbda0caa8f4afcc55fdae4c9b4e7 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期二, 31 五月 2022 13:37:16 +0800 Subject: [PATCH] update 优化 ExcelUtil 工具支持合并处理器 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 59 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 42 insertions(+), 17 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 d2ccd56..a45fc2d 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 @@ -2,12 +2,17 @@ import cn.hutool.core.util.IdUtil; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.ruoyi.common.convert.ExcelBigNumberConvert; +import com.ruoyi.common.excel.CellMergeStrategy; import com.ruoyi.common.excel.DefaultExcelListener; +import com.ruoyi.common.excel.ExcelListener; import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; @@ -20,10 +25,11 @@ * * @author Lion Li */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class ExcelUtil { /** - * 鍚屾瀵煎叆 + * 鍚屾瀵煎叆(閫傜敤浜庡皬鏁版嵁閲�) * * @param is 杈撳叆娴� * @return 杞崲鍚庨泦鍚� @@ -34,11 +40,11 @@ /** - * 浣跨敤鏍¢獙鐩戝惉鍣ㄥ鐞嗗鍏� + * 浣跨敤鏍¢獙鐩戝惉鍣� 寮傛瀵煎叆 鍚屾杩斿洖 * - * @param is 杈撳叆娴� - * @param clazz 瀵硅薄绫诲瀷 - * @param isValidate 鏄惁 Validator 妫�楠� 榛樿涓烘槸 + * @param is 杈撳叆娴� + * @param clazz 瀵硅薄绫诲瀷 + * @param isValidate 鏄惁 Validator 妫�楠� 榛樿涓烘槸 * @return 杞崲鍚庨泦鍚� */ public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, boolean isValidate) { @@ -48,16 +54,16 @@ } /** - * 浣跨敤鑷畾涔夌洃鍚櫒瀵煎叆 + * 浣跨敤鑷畾涔夌洃鍚櫒 寮傛瀵煎叆 鑷畾涔夎繑鍥� * - * @param is 杈撳叆娴� - * @param clazz 瀵硅薄绫诲瀷 - * @param readListener 鑷畾涔夌洃鍚櫒 + * @param is 杈撳叆娴� + * @param clazz 瀵硅薄绫诲瀷 + * @param listener 鑷畾涔夌洃鍚櫒 * @return 杞崲鍚庨泦鍚� */ - public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, DefaultExcelListener<T> readListener) { - EasyExcel.read(is, clazz, readListener).sheet().doRead(); - return readListener.getExcelResult(); + public static <T> ExcelResult<T> importExcel(InputStream is, Class<T> clazz, ExcelListener<T> listener) { + EasyExcel.read(is, clazz, listener).sheet().doRead(); + return listener.getExcelResult(); } /** @@ -65,22 +71,41 @@ * * @param list 瀵煎嚭鏁版嵁闆嗗悎 * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О - * @return 缁撴灉 + * @param clazz 瀹炰綋绫� + * @param response 鍝嶅簲浣� */ public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response) { + exportExcel(list, sheetName, clazz, false, response); + } + + /** + * 瀵煎嚭excel + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param clazz 瀹炰綋绫� + * @param merge 鏄惁鍚堝苟鍗曞厓鏍� + * @param response 鍝嶅簲浣� + */ + public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, boolean merge, HttpServletResponse response) { try { String filename = encodingFilename(sheetName); response.reset(); FileUtils.setAttachmentResponseHeader(response, filename); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); ServletOutputStream os = response.getOutputStream(); - EasyExcel.write(os, clazz) + ExcelWriterSheetBuilder builder = EasyExcel.write(os, clazz) .autoCloseStream(false) // 鑷姩閫傞厤 .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 澶ф暟鍊艰嚜鍔ㄨ浆鎹� 闃叉澶辩湡 .registerConverter(new ExcelBigNumberConvert()) - .sheet(sheetName).doWrite(list); + .sheet(sheetName); + if (merge) { + // 鍚堝苟澶勭悊鍣� + builder.registerWriteHandler(new CellMergeStrategy(list, true)); + } + builder.doWrite(list); } catch (IOException e) { throw new RuntimeException("瀵煎嚭Excel寮傚父"); } @@ -99,7 +124,7 @@ String[] convertSource = converterExp.split(","); for (String item : convertSource) { String[] itemArray = item.split("="); - if (StringUtils.containsAny(separator, propertyValue)) { + if (StringUtils.containsAny(propertyValue, separator)) { for (String value : propertyValue.split(separator)) { if (itemArray[0].equals(value)) { propertyString.append(itemArray[1] + separator); @@ -128,7 +153,7 @@ String[] convertSource = converterExp.split(","); for (String item : convertSource) { String[] itemArray = item.split("="); - if (StringUtils.containsAny(separator, propertyValue)) { + if (StringUtils.containsAny(propertyValue, separator)) { for (String value : propertyValue.split(separator)) { if (itemArray[1].equals(value)) { propertyString.append(itemArray[0] + separator); -- Gitblit v1.9.3