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
77a63504
Commit
77a63504
authored
Dec 02, 2024
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复导出子列表对象只能在最后的问题
parent
58a21ff9
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
91 additions
and
58 deletions
+91
-58
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+91
-58
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
View file @
77a63504
...
@@ -252,8 +252,6 @@ public class ExcelUtil<T>
...
@@ -252,8 +252,6 @@ public class ExcelUtil<T>
{
{
if
(
StringUtils
.
isNotEmpty
(
title
))
if
(
StringUtils
.
isNotEmpty
(
title
))
{
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
int
titleLastCol
=
this
.
fields
.
size
()
-
1
;
int
titleLastCol
=
this
.
fields
.
size
()
-
1
;
if
(
isSubList
())
if
(
isSubList
())
{
{
...
@@ -264,7 +262,7 @@ public class ExcelUtil<T>
...
@@ -264,7 +262,7 @@ public class ExcelUtil<T>
Cell
titleCell
=
titleRow
.
createCell
(
0
);
Cell
titleCell
=
titleRow
.
createCell
(
0
);
titleCell
.
setCellStyle
(
styles
.
get
(
"title"
));
titleCell
.
setCellStyle
(
styles
.
get
(
"title"
));
titleCell
.
setCellValue
(
title
);
titleCell
.
setCellValue
(
title
);
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
titleRow
.
getRowNum
(),
titleRow
.
getRowNum
(),
titleRow
.
getRowNum
()
,
titleLastCol
));
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
titleRow
.
getRowNum
(),
titleRow
.
getRowNum
(),
0
,
titleLastCol
));
}
}
}
}
...
@@ -275,23 +273,31 @@ public class ExcelUtil<T>
...
@@ -275,23 +273,31 @@ public class ExcelUtil<T>
{
{
if
(
isSubList
())
if
(
isSubList
())
{
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
Row
subRow
=
sheet
.
createRow
(
rownum
);
Row
subRow
=
sheet
.
createRow
(
rownum
);
int
excelNum
=
0
;
int
column
=
0
;
int
subFieldSize
=
subFields
!=
null
?
subFields
.
size
()
:
0
;
for
(
Object
[]
objects
:
fields
)
for
(
Object
[]
objects
:
fields
)
{
{
Field
field
=
(
Field
)
objects
[
0
];
Excel
attr
=
(
Excel
)
objects
[
1
];
Excel
attr
=
(
Excel
)
objects
[
1
];
Cell
headCell1
=
subRow
.
createCell
(
excelNum
);
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
headCell1
.
setCellValue
(
attr
.
name
());
{
headCell1
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"header_{}_{}"
,
attr
.
headerColor
(),
attr
.
headerBackgroundColor
())));
Cell
cell
=
subRow
.
createCell
(
column
);
excelNum
++;
cell
.
setCellValue
(
attr
.
name
());
}
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"header_{}_{}"
,
attr
.
headerColor
(),
attr
.
headerBackgroundColor
())));
int
headFirstRow
=
excelNum
-
1
;
if
(
subFieldSize
>
1
)
int
headLastRow
=
headFirstRow
+
subFields
.
size
()
-
1
;
{
if
(
headLastRow
>
headFirstRow
)
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
rownum
,
rownum
,
column
,
column
+
subFieldSize
-
1
);
{
sheet
.
addMergedRegion
(
cellAddress
);
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
,
rownum
,
headFirstRow
,
headLastRow
));
}
column
+=
subFieldSize
;
}
else
{
Cell
cell
=
subRow
.
createCell
(
column
++);
cell
.
setCellValue
(
attr
.
name
());
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"header_{}_{}"
,
attr
.
headerColor
(),
attr
.
headerBackgroundColor
())));
}
}
}
rownum
++;
rownum
++;
}
}
...
@@ -725,66 +731,93 @@ public class ExcelUtil<T>
...
@@ -725,66 +731,93 @@ public class ExcelUtil<T>
{
{
int
startNo
=
index
*
sheetSize
;
int
startNo
=
index
*
sheetSize
;
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
int
rowNo
=
(
1
+
rownum
)
-
startNo
;
int
currentRowNum
=
rownum
+
1
;
// 从标题行后开始
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
{
{
rowNo
=
isSubList
()
?
(
i
>
1
?
rowNo
+
1
:
rowNo
+
i
)
:
i
+
1
+
rownum
-
startNo
;
row
=
sheet
.
createRow
(
currentRowNum
);
row
=
sheet
.
createRow
(
rowNo
);
// 得到导出对象.
T
vo
=
(
T
)
list
.
get
(
i
);
T
vo
=
(
T
)
list
.
get
(
i
);
Collection
<?>
subList
=
null
;
if
(
isSubList
())
{
if
(
isSubListValue
(
vo
))
{
subList
=
getListCellValue
(
vo
);
subMergedLastRowNum
=
subMergedLastRowNum
+
subList
.
size
();
}
else
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
}
}
int
column
=
0
;
int
column
=
0
;
int
maxSubListSize
=
getCurrentMaxSubListSize
(
vo
);
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
{
{
Field
field
=
(
Field
)
os
[
0
];
Field
field
=
(
Field
)
os
[
0
];
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
())
&&
StringUtils
.
isNotNull
(
subList
)
)
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
{
boolean
subFirst
=
false
;
try
for
(
Object
obj
:
subList
)
{
{
if
(
subFirst
)
Collection
<?>
subList
=
(
Collection
<?>)
getTargetValue
(
vo
,
field
,
excel
);
if
(
subList
!=
null
&&
!
subList
.
isEmpty
())
{
{
rowNo
++;
int
subIndex
=
0
;
row
=
sheet
.
createRow
(
rowNo
);
for
(
Object
subVo
:
subList
)
}
List
<
Field
>
subFields
=
FieldUtils
.
getFieldsListWithAnnotation
(
obj
.
getClass
(),
Excel
.
class
);
int
subIndex
=
0
;
for
(
Field
subField
:
subFields
)
{
if
(
subField
.
isAnnotationPresent
(
Excel
.
class
))
{
{
subField
.
setAccessible
(
true
);
Row
subRow
=
sheet
.
getRow
(
currentRowNum
+
subIndex
);
Excel
attr
=
subField
.
getAnnotation
(
Excel
.
class
);
if
(
subRow
==
null
)
this
.
addCell
(
attr
,
row
,
(
T
)
obj
,
subField
,
column
+
subIndex
);
{
subRow
=
sheet
.
createRow
(
currentRowNum
+
subIndex
);
}
int
subColumn
=
column
;
for
(
Field
subField
:
subFields
)
{
Excel
subExcel
=
subField
.
getAnnotation
(
Excel
.
class
);
addCell
(
subExcel
,
subRow
,
(
T
)
subVo
,
subField
,
subColumn
++);
}
subIndex
++;
}
}
subIndex
++
;
column
+=
subFields
.
size
()
;
}
}
subFirst
=
true
;
}
}
this
.
subMergedFirstRowNum
=
this
.
subMergedFirstRowNum
+
subList
.
size
();
catch
(
Exception
e
)
{
log
.
error
(
"填充集合数据失败"
,
e
);
}
}
}
else
else
{
{
this
.
addCell
(
excel
,
row
,
vo
,
field
,
column
++);
// 创建单元格并设置值
addCell
(
excel
,
row
,
vo
,
field
,
column
);
if
(
maxSubListSize
>
1
&&
excel
.
needMerge
())
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
currentRowNum
,
currentRowNum
+
maxSubListSize
-
1
,
column
,
column
));
}
column
++;
}
}
}
}
currentRowNum
+=
maxSubListSize
;
}
}
}
}
/**
* 获取子列表最大数
*/
private
int
getCurrentMaxSubListSize
(
T
vo
)
{
int
maxSubListSize
=
1
;
for
(
Object
[]
os
:
fields
)
{
Field
field
=
(
Field
)
os
[
0
];
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
try
{
Collection
<?>
subList
=
(
Collection
<?>)
getTargetValue
(
vo
,
field
,
(
Excel
)
os
[
1
]);
if
(
subList
!=
null
&&
!
subList
.
isEmpty
())
{
maxSubListSize
=
Math
.
max
(
maxSubListSize
,
subList
.
size
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取集合大小失败"
,
e
);
}
}
}
return
maxSubListSize
;
}
/**
/**
* 创建表格样式
* 创建表格样式
*
*
...
@@ -1099,8 +1132,10 @@ public class ExcelUtil<T>
...
@@ -1099,8 +1132,10 @@ public class ExcelUtil<T>
cell
=
row
.
createCell
(
column
);
cell
=
row
.
createCell
(
column
);
if
(
isSubListValue
(
vo
)
&&
getListCellValue
(
vo
).
size
()
>
1
&&
attr
.
needMerge
())
if
(
isSubListValue
(
vo
)
&&
getListCellValue
(
vo
).
size
()
>
1
&&
attr
.
needMerge
())
{
{
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
);
if
(
subMergedLastRowNum
>=
subMergedFirstRowNum
)
sheet
.
addMergedRegion
(
cellAddress
);
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
));
}
}
}
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
(),
attr
.
cellType
())));
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
(),
attr
.
cellType
())));
...
@@ -1443,6 +1478,7 @@ public class ExcelUtil<T>
...
@@ -1443,6 +1478,7 @@ public class ExcelUtil<T>
*/
*/
private
Object
getTargetValue
(
T
vo
,
Field
field
,
Excel
excel
)
throws
Exception
private
Object
getTargetValue
(
T
vo
,
Field
field
,
Excel
excel
)
throws
Exception
{
{
field
.
setAccessible
(
true
);
Object
o
=
field
.
get
(
vo
);
Object
o
=
field
.
get
(
vo
);
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
{
{
...
@@ -1543,7 +1579,6 @@ public class ExcelUtil<T>
...
@@ -1543,7 +1579,6 @@ public class ExcelUtil<T>
Excel
attr
=
field
.
getAnnotation
(
Excel
.
class
);
Excel
attr
=
field
.
getAnnotation
(
Excel
.
class
);
if
(
attr
!=
null
&&
(
attr
.
type
()
==
Type
.
ALL
||
attr
.
type
()
==
type
))
if
(
attr
!=
null
&&
(
attr
.
type
()
==
Type
.
ALL
||
attr
.
type
()
==
type
))
{
{
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
field
,
attr
});
}
}
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
...
@@ -1567,7 +1602,6 @@ public class ExcelUtil<T>
...
@@ -1567,7 +1602,6 @@ public class ExcelUtil<T>
if
(
ArrayUtils
.
contains
(
this
.
includeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
if
(
ArrayUtils
.
contains
(
this
.
includeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Type
.
ALL
||
attr
.
type
()
==
type
)))
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Type
.
ALL
||
attr
.
type
()
==
type
)))
{
{
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
field
,
attr
});
}
}
}
}
...
@@ -1576,7 +1610,6 @@ public class ExcelUtil<T>
...
@@ -1576,7 +1610,6 @@ public class ExcelUtil<T>
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Type
.
ALL
||
attr
.
type
()
==
type
)))
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Type
.
ALL
||
attr
.
type
()
==
type
)))
{
{
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
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