懒羊羊
2024-01-31 e57a8990ae56f657a59c435a0613c5f7a8728003
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
182
183
184
185
186
187
package com.jcdm.common.annotation;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import com.jcdm.common.utils.poi.ExcelHandlerAdapter;
 
/**
 * 自定义导出Excel数据注解
 * 
 * @author jc
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
    /**
     * 导出时在excel中排序
     */
    public int sort() default Integer.MAX_VALUE;
 
    /**
     * 导出到Excel中的名字.
     */
    public String name() default "";
 
    /**
     * 日期格式, 如: yyyy-MM-dd
     */
    public String dateFormat() default "";
 
    /**
     * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
     */
    public String dictType() default "";
 
    /**
     * 读取内容转表达式 (如: 0=男,1=女,2=未知)
     */
    public String readConverterExp() default "";
 
    /**
     * 分隔符,读取字符串组内容
     */
    public String separator() default ",";
 
    /**
     * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
     */
    public int scale() default -1;
 
    /**
     * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
     */
    public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
 
    /**
     * 导出时在excel中每个列的高度
     */
    public double height() default 14;
 
    /**
     * 导出时在excel中每个列的宽度
     */
    public double width() default 16;
 
    /**
     * 文字后缀,如% 90 变成90%
     */
    public String suffix() default "";
 
    /**
     * 当值为空时,字段的默认值
     */
    public String defaultValue() default "";
 
    /**
     * 提示信息
     */
    public String prompt() default "";
 
    /**
     * 设置只能选择不能输入的列内容.
     */
    public String[] combo() default {};
 
    /**
     * 是否需要纵向合并单元格,应对需求:含有list集合单元格)
     */
    public boolean needMerge() default false;
 
    /**
     * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
     */
    public boolean isExport() default true;
 
    /**
     * 另一个类中的属性名称,支持多级获取,以小数点隔开
     */
    public String targetAttr() default "";
 
    /**
     * 是否自动统计数据,在最后追加一行统计数据总和
     */
    public boolean isStatistics() default false;
 
    /**
     * 导出类型(0数字 1字符串 2图片)
     */
    public ColumnType cellType() default ColumnType.STRING;
 
    /**
     * 导出列头背景颜色
     */
    public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT;
 
    /**
     * 导出列头字体颜色
     */
    public IndexedColors headerColor() default IndexedColors.WHITE;
 
    /**
     * 导出单元格背景颜色
     */
    public IndexedColors backgroundColor() default IndexedColors.WHITE;
 
    /**
     * 导出单元格字体颜色
     */
    public IndexedColors color() default IndexedColors.BLACK;
 
    /**
     * 导出字段对齐方式
     */
    public HorizontalAlignment align() default HorizontalAlignment.CENTER;
 
    /**
     * 自定义数据处理器
     */
    public Class<?> handler() default ExcelHandlerAdapter.class;
 
    /**
     * 自定义数据处理器参数
     */
    public String[] args() default {};
 
    /**
     * 字段类型(0:导出导入;1:仅导出;2:仅导入)
     */
    Type type() default Type.ALL;
 
    public enum Type
    {
        ALL(0), EXPORT(1), IMPORT(2);
        private final int value;
 
        Type(int value)
        {
            this.value = value;
        }
 
        public int value()
        {
            return this.value;
        }
    }
 
    public enum ColumnType
    {
        NUMERIC(0), STRING(1), IMAGE(2);
        private final int value;
 
        ColumnType(int value)
        {
            this.value = value;
        }
 
        public int value()
        {
            return this.value;
        }
    }
}