From 3b42abef44bbc439ec2fd63d1b223efc121e945d Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期三, 22 九月 2021 09:03:01 +0800 Subject: [PATCH] Excel注解支持自定义数据处理器 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 31 +++++++++++++++ ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java | 13 ++++++ ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java | 19 +++++++++ 3 files changed, 62 insertions(+), 1 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java index 50482c5..9fb64da 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java @@ -5,6 +5,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.math.BigDecimal; +import com.ruoyi.common.utils.poi.ExcelHandlerAdapter; /** * 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ @@ -108,7 +109,17 @@ /** * 瀵煎嚭瀛楁瀵归綈鏂瑰紡锛�0锛氶粯璁わ紱1锛氶潬宸︼紱2锛氬眳涓紱3锛氶潬鍙筹級 */ - Align align() default Align.AUTO; + public Align align() default Align.AUTO; + + /** + * 鑷畾涔夋暟鎹鐞嗗櫒 + */ + public Class<?> handler() default ExcelHandlerAdapter.class; + + /** + * 鑷畾涔夋暟鎹鐞嗗櫒鍙傛暟 + */ + public String[] args() default {}; public enum Align { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000..c9ca2d5 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.utils.poi; + +/** + * Excel鏁版嵁鏍煎紡澶勭悊閫傞厤鍣� + * + * @author ruoyi + */ +public interface ExcelHandlerAdapter +{ + /** + * 鏍煎紡鍖� + * + * @param value 鍗曞厓鏍兼暟鎹�� + * @param args excel娉ㄨВargs鍙傛暟缁� + * + * @return 澶勭悊鍚庣殑鍊� + */ + Object format(Object value, String[] args); +} 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 0ab074e..3884790 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 @@ -6,6 +6,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.ArrayList; @@ -332,6 +333,10 @@ else if (StringUtils.isNotEmpty(attr.dictType())) { val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + val = dataFormatHandlerAdapter(val, attr); } else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) { @@ -729,6 +734,10 @@ { cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString()); } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + cell.setCellValue(dataFormatHandlerAdapter(value, attr)); + } else { // 璁剧疆鍒楃被鍨� @@ -902,6 +911,28 @@ } /** + * 鏁版嵁澶勭悊鍣� + * + * @param value 鏁版嵁鍊� + * @param excel 鏁版嵁娉ㄨВ + * @return + */ + public String dataFormatHandlerAdapter(Object value, Excel excel) + { + try + { + Object instance = excel.handler().newInstance(); + Method formatMethod = excel.handler().getMethod("format", new Class[] { Object.class, String[].class }); + value = formatMethod.invoke(instance, value, excel.args()); + } + catch (Exception e) + { + log.error("涓嶈兘鏍煎紡鍖栨暟鎹� " + excel.handler(), e.getMessage()); + } + return Convert.toStr(value); + } + + /** * 鍚堣缁熻淇℃伅 */ private void addStatisticsData(Integer index, String text, Excel entity) -- Gitblit v1.9.3