Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cocktail-party-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cocktail-party
cocktail-party-server
Commits
11320b2e
提交
11320b2e
authored
3月 22, 2024
作者:
RuoYi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Excel注解ColumnType类型新增文本
上级
905c08fb
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
61 行增加
和
26 行删除
+61
-26
Excel.java
...mmon/src/main/java/com/ruoyi/common/annotation/Excel.java
+1
-1
SysUser.java
...ain/java/com/ruoyi/common/core/domain/entity/SysUser.java
+1
-1
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+59
-24
没有找到文件。
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
浏览文件 @
11320b2e
...
@@ -171,7 +171,7 @@ public @interface Excel
...
@@ -171,7 +171,7 @@ public @interface Excel
public
enum
ColumnType
public
enum
ColumnType
{
{
NUMERIC
(
0
),
STRING
(
1
),
IMAGE
(
2
);
NUMERIC
(
0
),
STRING
(
1
),
IMAGE
(
2
)
,
TEXT
(
3
)
;
private
final
int
value
;
private
final
int
value
;
ColumnType
(
int
value
)
ColumnType
(
int
value
)
...
...
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
浏览文件 @
11320b2e
...
@@ -42,7 +42,7 @@ public class SysUser extends BaseEntity
...
@@ -42,7 +42,7 @@ public class SysUser extends BaseEntity
private
String
email
;
private
String
email
;
/** 手机号码 */
/** 手机号码 */
@Excel
(
name
=
"手机号码"
)
@Excel
(
name
=
"手机号码"
,
cellType
=
ColumnType
.
TEXT
)
private
String
phonenumber
;
private
String
phonenumber
;
/** 用户性别 */
/** 用户性别 */
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
浏览文件 @
11320b2e
...
@@ -39,6 +39,7 @@ import org.apache.poi.ss.usermodel.Cell;
...
@@ -39,6 +39,7 @@ import org.apache.poi.ss.usermodel.Cell;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.CellType
;
import
org.apache.poi.ss.usermodel.CellType
;
import
org.apache.poi.ss.usermodel.ClientAnchor
;
import
org.apache.poi.ss.usermodel.ClientAnchor
;
import
org.apache.poi.ss.usermodel.DataFormat
;
import
org.apache.poi.ss.usermodel.DataValidation
;
import
org.apache.poi.ss.usermodel.DataValidation
;
import
org.apache.poi.ss.usermodel.DataValidationConstraint
;
import
org.apache.poi.ss.usermodel.DataValidationConstraint
;
import
org.apache.poi.ss.usermodel.DataValidationHelper
;
import
org.apache.poi.ss.usermodel.DataValidationHelper
;
...
@@ -783,6 +784,8 @@ public class ExcelUtil<T>
...
@@ -783,6 +784,8 @@ public class ExcelUtil<T>
titleFont
.
setFontHeightInPoints
((
short
)
16
);
titleFont
.
setFontHeightInPoints
((
short
)
16
);
titleFont
.
setBold
(
true
);
titleFont
.
setBold
(
true
);
style
.
setFont
(
titleFont
);
style
.
setFont
(
titleFont
);
DataFormat
dataFormat
=
wb
.
createDataFormat
();
style
.
setDataFormat
(
dataFormat
.
getFormat
(
"@"
));
styles
.
put
(
"title"
,
style
);
styles
.
put
(
"title"
,
style
);
style
=
wb
.
createCellStyle
();
style
=
wb
.
createCellStyle
();
...
@@ -862,34 +865,66 @@ public class ExcelUtil<T>
...
@@ -862,34 +865,66 @@ public class ExcelUtil<T>
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
{
{
Field
field
=
(
Field
)
os
[
0
];
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
String
key
=
StringUtils
.
format
(
"data_{}_{}_{}"
,
excel
.
align
(),
excel
.
color
(),
excel
.
backgroundColor
());
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
if
(!
styles
.
containsKey
(
key
))
{
{
CellStyle
style
=
wb
.
createCellStyle
();
ParameterizedType
pt
=
(
ParameterizedType
)
field
.
getGenericType
();
style
.
setAlignment
(
excel
.
align
());
Class
<?>
subClass
=
(
Class
<?>)
pt
.
getActualTypeArguments
()[
0
];
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
List
<
Field
>
subFields
=
FieldUtils
.
getFieldsListWithAnnotation
(
subClass
,
Excel
.
class
);
style
.
setBorderRight
(
BorderStyle
.
THIN
);
for
(
Field
subField
:
subFields
)
style
.
setRightBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
{
style
.
setBorderLeft
(
BorderStyle
.
THIN
);
Excel
subExcel
=
subField
.
getAnnotation
(
Excel
.
class
);
style
.
setLeftBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
annotationDataStyles
(
styles
,
subField
,
subExcel
);
style
.
setBorderTop
(
BorderStyle
.
THIN
);
}
style
.
setTopBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
}
style
.
setBorderBottom
(
BorderStyle
.
THIN
);
else
style
.
setBottomBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
{
style
.
setFillPattern
(
FillPatternType
.
SOLID_FOREGROUND
);
annotationDataStyles
(
styles
,
field
,
excel
);
style
.
setFillForegroundColor
(
excel
.
backgroundColor
().
getIndex
());
Font
dataFont
=
wb
.
createFont
();
dataFont
.
setFontName
(
"Arial"
);
dataFont
.
setFontHeightInPoints
((
short
)
10
);
dataFont
.
setColor
(
excel
.
color
().
index
);
style
.
setFont
(
dataFont
);
styles
.
put
(
key
,
style
);
}
}
}
}
return
styles
;
return
styles
;
}
}
/**
* 根据Excel注解创建表格列样式
*
* @param styles 自定义样式列表
* @param field 属性列信息
* @param excel 注解信息
*/
public
void
annotationDataStyles
(
Map
<
String
,
CellStyle
>
styles
,
Field
field
,
Excel
excel
)
{
String
key
=
StringUtils
.
format
(
"data_{}_{}_{}_{}"
,
excel
.
align
(),
excel
.
color
(),
excel
.
backgroundColor
(),
excel
.
cellType
());
if
(!
styles
.
containsKey
(
key
))
{
CellStyle
style
=
wb
.
createCellStyle
();
style
.
setAlignment
(
excel
.
align
());
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
style
.
setBorderRight
(
BorderStyle
.
THIN
);
style
.
setRightBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
style
.
setBorderLeft
(
BorderStyle
.
THIN
);
style
.
setLeftBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
style
.
setBorderTop
(
BorderStyle
.
THIN
);
style
.
setTopBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
style
.
setBorderBottom
(
BorderStyle
.
THIN
);
style
.
setBottomBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
style
.
setFillPattern
(
FillPatternType
.
SOLID_FOREGROUND
);
style
.
setFillForegroundColor
(
excel
.
backgroundColor
().
getIndex
());
Font
dataFont
=
wb
.
createFont
();
dataFont
.
setFontName
(
"Arial"
);
dataFont
.
setFontHeightInPoints
((
short
)
10
);
dataFont
.
setColor
(
excel
.
color
().
index
);
style
.
setFont
(
dataFont
);
if
(
ColumnType
.
TEXT
==
excel
.
cellType
())
{
DataFormat
dataFormat
=
wb
.
createDataFormat
();
style
.
setDataFormat
(
dataFormat
.
getFormat
(
"@"
));
}
styles
.
put
(
key
,
style
);
}
}
/**
/**
* 创建单元格
* 创建单元格
*/
*/
...
@@ -904,7 +939,7 @@ public class ExcelUtil<T>
...
@@ -904,7 +939,7 @@ public class ExcelUtil<T>
if
(
isSubList
())
if
(
isSubList
())
{
{
// 填充默认样式,防止合并单元格样式失效
// 填充默认样式,防止合并单元格样式失效
sheet
.
setDefaultColumnStyle
(
column
,
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}
"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
())));
sheet
.
setDefaultColumnStyle
(
column
,
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}
_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
(),
attr
.
cellType
())));
if
(
attr
.
needMerge
())
if
(
attr
.
needMerge
())
{
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
-
1
,
rownum
,
column
,
column
));
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
-
1
,
rownum
,
column
,
column
));
...
@@ -922,7 +957,7 @@ public class ExcelUtil<T>
...
@@ -922,7 +957,7 @@ public class ExcelUtil<T>
*/
*/
public
void
setCellVo
(
Object
value
,
Excel
attr
,
Cell
cell
)
public
void
setCellVo
(
Object
value
,
Excel
attr
,
Cell
cell
)
{
{
if
(
ColumnType
.
STRING
==
attr
.
cellType
())
if
(
ColumnType
.
STRING
==
attr
.
cellType
()
||
ColumnType
.
TEXT
==
attr
.
cellType
()
)
{
{
String
cellValue
=
Convert
.
toStr
(
value
);
String
cellValue
=
Convert
.
toStr
(
value
);
// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
...
@@ -1034,7 +1069,7 @@ public class ExcelUtil<T>
...
@@ -1034,7 +1069,7 @@ public class ExcelUtil<T>
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
);
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
);
sheet
.
addMergedRegion
(
cellAddress
);
sheet
.
addMergedRegion
(
cellAddress
);
}
}
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}
"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
())));
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}
_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
(),
attr
.
cellType
())));
// 用于读取对象中的属性
// 用于读取对象中的属性
Object
value
=
getTargetValue
(
vo
,
field
,
attr
);
Object
value
=
getTargetValue
(
vo
,
field
,
attr
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论