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
77a63504
提交
77a63504
authored
12月 02, 2024
作者:
RuoYi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复导出子列表对象只能在最后的问题
上级
58a21ff9
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
86 行增加
和
53 行删除
+86
-53
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+86
-53
没有找到文件。
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
浏览文件 @
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
())));
if
(
subFieldSize
>
1
)
{
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
rownum
,
rownum
,
column
,
column
+
subFieldSize
-
1
);
sheet
.
addMergedRegion
(
cellAddress
);
}
column
+=
subFieldSize
;
}
}
int
headFirstRow
=
excelNum
-
1
;
else
int
headLastRow
=
headFirstRow
+
subFields
.
size
()
-
1
;
if
(
headLastRow
>
headFirstRow
)
{
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
,
rownum
,
headFirstRow
,
headLastRow
));
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
++;
row
=
sheet
.
createRow
(
rowNo
);
}
List
<
Field
>
subFields
=
FieldUtils
.
getFieldsListWithAnnotation
(
obj
.
getClass
(),
Excel
.
class
);
int
subIndex
=
0
;
int
subIndex
=
0
;
for
(
Field
subField
:
subFields
)
for
(
Object
subVo
:
subList
)
{
Row
subRow
=
sheet
.
getRow
(
currentRowNum
+
subIndex
);
if
(
subRow
==
null
)
{
{
if
(
subField
.
isAnnotationPresent
(
Excel
.
class
))
subRow
=
sheet
.
createRow
(
currentRowNum
+
subIndex
);
}
int
subColumn
=
column
;
for
(
Field
subField
:
subFields
)
{
{
subField
.
setAccessible
(
true
);
Excel
subExcel
=
subField
.
getAnnotation
(
Excel
.
class
);
Excel
attr
=
subField
.
getAnnotation
(
Excel
.
class
);
addCell
(
subExcel
,
subRow
,
(
T
)
subVo
,
subField
,
subColumn
++);
this
.
addCell
(
attr
,
row
,
(
T
)
obj
,
subField
,
column
+
subIndex
);
}
}
subIndex
++;
subIndex
++;
}
}
subFirst
=
true
;
column
+=
subFields
.
size
();
}
}
catch
(
Exception
e
)
{
log
.
error
(
"填充集合数据失败"
,
e
);
}
}
this
.
subMergedFirstRowNum
=
this
.
subMergedFirstRowNum
+
subList
.
size
();
}
}
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
});
}
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论