chengf
2025-10-28 2807cca4b6f2e8af204d798679dcee78e695ee28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package com.ruoyi.common.annotation;
 
import com.ruoyi.common.utils.poi.ExcelHandlerAdapter;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
 
/**
 * 自定义导出Excel数据注解
 *
 * @author ruoyi
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel {
    /**
     * 导出时在excel中排序
     */
    int sort() default Integer.MAX_VALUE;
 
    /**
     * 导出到Excel中的名字.
     */
    String name() default "";
 
    /**
     * 日期格式, 如: yyyy-MM-dd
     */
    String dateFormat() default "";
 
    /**
     * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
     */
    String dictType() default "";
 
    /**
     * 读取内容转表达式 (如: 0=男,1=女,2=未知)
     */
    String readConverterExp() default "";
 
    /**
     * 分隔符,读取字符串组内容
     */
    String separator() default ",";
 
    /**
     * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
     */
    int scale() default -1;
 
    /**
     * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
     */
    int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
 
    /**
     * 导出时在excel中每个列的高度 单位为字符
     */
    double height() default 14;
 
    /**
     * 导出时在excel中每个列的宽 单位为字符
     */
    double width() default 16;
 
    /**
     * 文字后缀,如% 90 变成90%
     */
    String suffix() default "";
 
    /**
     * 当值为空时,字段的默认值
     */
    String defaultValue() default "";
 
    /**
     * 提示信息
     */
    String prompt() default "";
 
    /**
     * 设置只能选择不能输入的列内容.
     */
    String[] combo() default {};
 
    /**
     * 是否需要纵向合并单元格,应对需求:含有list集合单元格)
     */
    boolean needMerge() default false;
 
    /**
     * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
     */
    boolean isExport() default true;
 
    /**
     * 另一个类中的属性名称,支持多级获取,以小数点隔开
     */
    String targetAttr() default "";
 
    /**
     * 是否自动统计数据,在最后追加一行统计数据总和
     */
    boolean isStatistics() default false;
 
    /**
     * 导出类型(0数字 1字符串 2图片)
     */
    ColumnType cellType() default ColumnType.STRING;
 
    /**
     * 导出列头背景色
     */
    IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT;
 
    /**
     * 导出列头字体颜色
     */
    IndexedColors headerColor() default IndexedColors.WHITE;
 
    /**
     * 导出单元格背景色
     */
    IndexedColors backgroundColor() default IndexedColors.WHITE;
 
    /**
     * 导出单元格字体颜色
     */
    IndexedColors color() default IndexedColors.BLACK;
 
    /**
     * 导出字段对齐方式
     */
    HorizontalAlignment align() default HorizontalAlignment.CENTER;
 
    /**
     * 自定义数据处理器
     */
    Class<?> handler() default ExcelHandlerAdapter.class;
 
    /**
     * 自定义数据处理器参数
     */
    String[] args() default {};
 
    /**
     * 字段类型(0:导出导入;1:仅导出;2:仅导入)
     */
    Type type() default Type.ALL;
 
    enum Type {
        ALL(0), EXPORT(1), IMPORT(2);
        private final int value;
 
        Type(int value) {
            this.value = value;
        }
 
        public int value() {
            return this.value;
        }
    }
 
    enum ColumnType {
        NUMERIC(0), STRING(1), IMAGE(2);
        private final int value;
 
        ColumnType(int value) {
            this.value = value;
        }
 
        public int value() {
            return this.value;
        }
    }
}