Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
sts网站
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liyang
sts网站
Commits
11320b2e
Commit
11320b2e
authored
Mar 22, 2024
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Excel注解ColumnType类型新增文本
parent
905c08fb
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
26 deletions
+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
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
View file @
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
View file @
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
View file @
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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment