Excel注解支持自定义数据处理器
This commit is contained in:
		
							parent
							
								
									26f0737c60
								
							
						
					
					
						commit
						3b42abef44
					
				| 
						 | 
					@ -5,6 +5,7 @@ import java.lang.annotation.Retention;
 | 
				
			||||||
import java.lang.annotation.RetentionPolicy;
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
import java.lang.annotation.Target;
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					import com.ruoyi.common.utils.poi.ExcelHandlerAdapter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 自定义导出Excel数据注解
 | 
					 * 自定义导出Excel数据注解
 | 
				
			||||||
| 
						 | 
					@ -108,7 +109,17 @@ public @interface Excel
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
 | 
					     * 导出字段对齐方式(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
 | 
					    public enum Align
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import java.io.IOException;
 | 
				
			||||||
import java.io.InputStream;
 | 
					import java.io.InputStream;
 | 
				
			||||||
import java.io.OutputStream;
 | 
					import java.io.OutputStream;
 | 
				
			||||||
import java.lang.reflect.Field;
 | 
					import java.lang.reflect.Field;
 | 
				
			||||||
 | 
					import java.lang.reflect.Method;
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
import java.text.DecimalFormat;
 | 
					import java.text.DecimalFormat;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
| 
						 | 
					@ -333,6 +334,10 @@ public class ExcelUtil<T>
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator());
 | 
					                            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))
 | 
					                        else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey());
 | 
					                            PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey());
 | 
				
			||||||
| 
						 | 
					@ -729,6 +734,10 @@ public class ExcelUtil<T>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
 | 
					                    cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                else if (!attr.handler().equals(ExcelHandlerAdapter.class))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    cell.setCellValue(dataFormatHandlerAdapter(value, attr));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    // 设置列类型
 | 
					                    // 设置列类型
 | 
				
			||||||
| 
						 | 
					@ -901,6 +910,28 @@ public class ExcelUtil<T>
 | 
				
			||||||
        return DictUtils.getDictValue(dictType, dictLabel, separator);
 | 
					        return DictUtils.getDictValue(dictType, dictLabel, separator);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 数据处理器
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 合计统计信息
 | 
					     * 合计统计信息
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue