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
30c89b33
Commit
30c89b33
authored
Sep 26, 2021
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Excel注解支持导入导出标题信息
parent
7479ff4b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
126 additions
and
22 deletions
+126
-22
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+126
-22
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
View file @
30c89b33
...
@@ -47,6 +47,7 @@ import org.apache.poi.ss.usermodel.Sheet;
...
@@ -47,6 +47,7 @@ import org.apache.poi.ss.usermodel.Sheet;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.WorkbookFactory
;
import
org.apache.poi.ss.usermodel.WorkbookFactory
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
...
@@ -125,6 +126,16 @@ public class ExcelUtil<T>
...
@@ -125,6 +126,16 @@ public class ExcelUtil<T>
*/
*/
private
List
<
Object
[]>
fields
;
private
List
<
Object
[]>
fields
;
/**
* 当前行号
*/
private
int
rownum
;
/**
* 标题
*/
private
String
title
;
/**
/**
* 最大高度
* 最大高度
*/
*/
...
@@ -150,7 +161,7 @@ public class ExcelUtil<T>
...
@@ -150,7 +161,7 @@ public class ExcelUtil<T>
this
.
clazz
=
clazz
;
this
.
clazz
=
clazz
;
}
}
public
void
init
(
List
<
T
>
list
,
String
sheetName
,
Type
type
)
public
void
init
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
Type
type
)
{
{
if
(
list
==
null
)
if
(
list
==
null
)
{
{
...
@@ -159,8 +170,27 @@ public class ExcelUtil<T>
...
@@ -159,8 +170,27 @@ public class ExcelUtil<T>
this
.
list
=
list
;
this
.
list
=
list
;
this
.
sheetName
=
sheetName
;
this
.
sheetName
=
sheetName
;
this
.
type
=
type
;
this
.
type
=
type
;
this
.
title
=
title
;
createExcelField
();
createExcelField
();
createWorkbook
();
createWorkbook
();
createTitle
();
}
/**
* 创建excel第一行标题
*/
public
void
createTitle
()
{
if
(
StringUtils
.
isNotEmpty
(
title
))
{
Row
titleRow
=
sheet
.
createRow
(
rownum
==
0
?
rownum
++
:
0
);
titleRow
.
setHeightInPoints
(
30
);
Cell
titleCell
=
titleRow
.
createCell
(
0
);
titleCell
.
setCellStyle
(
styles
.
get
(
"title"
));
titleCell
.
setCellValue
(
title
);
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
titleRow
.
getRowNum
(),
titleRow
.
getRowNum
(),
titleRow
.
getRowNum
(),
this
.
fields
.
size
()
-
1
));
}
}
}
/**
/**
...
@@ -171,17 +201,30 @@ public class ExcelUtil<T>
...
@@ -171,17 +201,30 @@ public class ExcelUtil<T>
*/
*/
public
List
<
T
>
importExcel
(
InputStream
is
)
throws
Exception
public
List
<
T
>
importExcel
(
InputStream
is
)
throws
Exception
{
{
return
importExcel
(
StringUtils
.
EMPTY
,
is
);
return
importExcel
(
is
,
0
);
}
/**
* 对excel表单默认第一个索引名转换成list
*
* @param is 输入流
* @param titleNum 标题占用行数
* @return 转换后集合
*/
public
List
<
T
>
importExcel
(
InputStream
is
,
int
titleNum
)
throws
Exception
{
return
importExcel
(
StringUtils
.
EMPTY
,
is
,
titleNum
);
}
}
/**
/**
* 对excel表单指定表格索引名转换成list
* 对excel表单指定表格索引名转换成list
*
*
* @param sheetName 表格索引名
* @param sheetName 表格索引名
* @param titleNum 标题占用行数
* @param is 输入流
* @param is 输入流
* @return 转换后集合
* @return 转换后集合
*/
*/
public
List
<
T
>
importExcel
(
String
sheetName
,
InputStream
is
)
throws
Exception
public
List
<
T
>
importExcel
(
String
sheetName
,
InputStream
is
,
int
titleNum
)
throws
Exception
{
{
this
.
type
=
Type
.
IMPORT
;
this
.
type
=
Type
.
IMPORT
;
this
.
wb
=
WorkbookFactory
.
create
(
is
);
this
.
wb
=
WorkbookFactory
.
create
(
is
);
...
@@ -210,7 +253,7 @@ public class ExcelUtil<T>
...
@@ -210,7 +253,7 @@ public class ExcelUtil<T>
// 定义一个map用于存放excel列的序号和field.
// 定义一个map用于存放excel列的序号和field.
Map
<
String
,
Integer
>
cellMap
=
new
HashMap
<
String
,
Integer
>();
Map
<
String
,
Integer
>
cellMap
=
new
HashMap
<
String
,
Integer
>();
// 获取表头
// 获取表头
Row
heard
=
sheet
.
getRow
(
0
);
Row
heard
=
sheet
.
getRow
(
titleNum
);
for
(
int
i
=
0
;
i
<
heard
.
getPhysicalNumberOfCells
();
i
++)
for
(
int
i
=
0
;
i
<
heard
.
getPhysicalNumberOfCells
();
i
++)
{
{
Cell
cell
=
heard
.
getCell
(
i
);
Cell
cell
=
heard
.
getCell
(
i
);
...
@@ -243,7 +286,7 @@ public class ExcelUtil<T>
...
@@ -243,7 +286,7 @@ public class ExcelUtil<T>
}
}
}
}
}
}
for
(
int
i
=
1
;
i
<=
rows
;
i
++)
for
(
int
i
=
titleNum
+
1
;
i
<=
rows
;
i
++)
{
{
// 从第2行开始取数据,默认第一行是表头.
// 从第2行开始取数据,默认第一行是表头.
Row
row
=
sheet
.
getRow
(
i
);
Row
row
=
sheet
.
getRow
(
i
);
...
@@ -369,7 +412,20 @@ public class ExcelUtil<T>
...
@@ -369,7 +412,20 @@ public class ExcelUtil<T>
*/
*/
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
)
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
)
{
{
this
.
init
(
list
,
sheetName
,
Type
.
EXPORT
);
return
exportExcel
(
list
,
sheetName
,
StringUtils
.
EMPTY
);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
this
.
init
(
list
,
sheetName
,
title
,
Type
.
EXPORT
);
return
exportExcel
();
return
exportExcel
();
}
}
...
@@ -382,11 +438,26 @@ public class ExcelUtil<T>
...
@@ -382,11 +438,26 @@ public class ExcelUtil<T>
* @return 结果
* @return 结果
* @throws IOException
* @throws IOException
*/
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
throws
IOException
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
throws
IOException
{
exportExcel
(
response
,
list
,
sheetName
,
StringUtils
.
EMPTY
);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param response 返回数据
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
* @throws IOException
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
)
throws
IOException
{
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
list
,
sheetName
,
Type
.
EXPORT
);
this
.
init
(
list
,
sheetName
,
title
,
Type
.
EXPORT
);
exportExcel
(
response
.
getOutputStream
());
exportExcel
(
response
.
getOutputStream
());
}
}
...
@@ -398,7 +469,19 @@ public class ExcelUtil<T>
...
@@ -398,7 +469,19 @@ public class ExcelUtil<T>
*/
*/
public
AjaxResult
importTemplateExcel
(
String
sheetName
)
public
AjaxResult
importTemplateExcel
(
String
sheetName
)
{
{
this
.
init
(
null
,
sheetName
,
Type
.
IMPORT
);
return
importTemplateExcel
(
sheetName
,
StringUtils
.
EMPTY
);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public
AjaxResult
importTemplateExcel
(
String
sheetName
,
String
title
)
{
this
.
init
(
null
,
sheetName
,
title
,
Type
.
IMPORT
);
return
exportExcel
();
return
exportExcel
();
}
}
...
@@ -409,10 +492,22 @@ public class ExcelUtil<T>
...
@@ -409,10 +492,22 @@ public class ExcelUtil<T>
* @return 结果
* @return 结果
*/
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
throws
IOException
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
throws
IOException
{
importTemplateExcel
(
response
,
sheetName
);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
,
String
title
)
throws
IOException
{
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
null
,
sheetName
,
Type
.
IMPORT
);
this
.
init
(
null
,
sheetName
,
title
,
Type
.
IMPORT
);
exportExcel
(
response
.
getOutputStream
());
exportExcel
(
response
.
getOutputStream
());
}
}
...
@@ -473,13 +568,13 @@ public class ExcelUtil<T>
...
@@ -473,13 +568,13 @@ public class ExcelUtil<T>
public
void
writeSheet
()
public
void
writeSheet
()
{
{
// 取出一共有多少个sheet.
// 取出一共有多少个sheet.
double
sheetNo
=
Math
.
ceil
(
list
.
size
()
/
sheetSize
);
int
sheetNo
=
Math
.
max
(
1
,
(
int
)
Math
.
ceil
(
list
.
size
()
*
1.0
/
sheetSize
)
);
for
(
int
index
=
0
;
index
<
=
sheetNo
;
index
++)
for
(
int
index
=
0
;
index
<
sheetNo
;
index
++)
{
{
createSheet
(
sheetNo
,
index
);
createSheet
(
sheetNo
,
index
);
// 产生一行
// 产生一行
Row
row
=
sheet
.
createRow
(
0
);
Row
row
=
sheet
.
createRow
(
rownum
);
int
column
=
0
;
int
column
=
0
;
// 写入各个字段的列头名称
// 写入各个字段的列头名称
for
(
Object
[]
os
:
fields
)
for
(
Object
[]
os
:
fields
)
...
@@ -507,7 +602,7 @@ public class ExcelUtil<T>
...
@@ -507,7 +602,7 @@ public class ExcelUtil<T>
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
{
{
row
=
sheet
.
createRow
(
i
+
1
-
startNo
);
row
=
sheet
.
createRow
(
i
+
1
+
rownum
-
startNo
);
// 得到导出对象.
// 得到导出对象.
T
vo
=
(
T
)
list
.
get
(
i
);
T
vo
=
(
T
)
list
.
get
(
i
);
int
column
=
0
;
int
column
=
0
;
...
@@ -535,6 +630,16 @@ public class ExcelUtil<T>
...
@@ -535,6 +630,16 @@ public class ExcelUtil<T>
CellStyle
style
=
wb
.
createCellStyle
();
CellStyle
style
=
wb
.
createCellStyle
();
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
Font
titleFont
=
wb
.
createFont
();
titleFont
.
setFontName
(
"Arial"
);
titleFont
.
setFontHeightInPoints
((
short
)
16
);
titleFont
.
setBold
(
true
);
style
.
setFont
(
titleFont
);
styles
.
put
(
"title"
,
style
);
style
=
wb
.
createCellStyle
();
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
style
.
setBorderRight
(
BorderStyle
.
THIN
);
style
.
setBorderRight
(
BorderStyle
.
THIN
);
style
.
setRightBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
style
.
setRightBorderColor
(
IndexedColors
.
GREY_50_PERCENT
.
getIndex
());
style
.
setBorderLeft
(
BorderStyle
.
THIN
);
style
.
setBorderLeft
(
BorderStyle
.
THIN
);
...
@@ -1117,6 +1222,9 @@ public class ExcelUtil<T>
...
@@ -1117,6 +1222,9 @@ public class ExcelUtil<T>
public
void
createWorkbook
()
public
void
createWorkbook
()
{
{
this
.
wb
=
new
SXSSFWorkbook
(
500
);
this
.
wb
=
new
SXSSFWorkbook
(
500
);
this
.
sheet
=
wb
.
createSheet
();
wb
.
setSheetName
(
0
,
sheetName
);
this
.
styles
=
createStyles
(
wb
);
}
}
/**
/**
...
@@ -1125,17 +1233,13 @@ public class ExcelUtil<T>
...
@@ -1125,17 +1233,13 @@ public class ExcelUtil<T>
* @param sheetNo sheet数量
* @param sheetNo sheet数量
* @param index 序号
* @param index 序号
*/
*/
public
void
createSheet
(
double
sheetNo
,
int
index
)
public
void
createSheet
(
int
sheetNo
,
int
index
)
{
{
this
.
sheet
=
wb
.
createSheet
();
this
.
styles
=
createStyles
(
wb
);
// 设置工作表的名称.
// 设置工作表的名称.
if
(
sheetNo
==
0
)
if
(
sheetNo
>
1
&&
index
>
0
)
{
wb
.
setSheetName
(
index
,
sheetName
);
}
else
{
{
this
.
sheet
=
wb
.
createSheet
();
this
.
createTitle
();
wb
.
setSheetName
(
index
,
sheetName
+
index
);
wb
.
setSheetName
(
index
,
sheetName
+
index
);
}
}
}
}
...
...
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