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
7be17ea8
Commit
7be17ea8
authored
Aug 11, 2021
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Excel注解支持Image图片导入
parent
1f07641d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
264 additions
and
91 deletions
+264
-91
RuoYiConfig.java
...on/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
+8
-0
FileUploadUtils.java
...ain/java/com/ruoyi/common/utils/file/FileUploadUtils.java
+2
-2
FileUtils.java
.../src/main/java/com/ruoyi/common/utils/file/FileUtils.java
+75
-22
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+179
-67
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
View file @
7be17ea8
...
@@ -90,6 +90,14 @@ public class RuoYiConfig
...
@@ -90,6 +90,14 @@ public class RuoYiConfig
RuoYiConfig
.
addressEnabled
=
addressEnabled
;
RuoYiConfig
.
addressEnabled
=
addressEnabled
;
}
}
/**
* 获取导入上传路径
*/
public
static
String
getImportPath
()
{
return
getProfile
()
+
"/import"
;
}
/**
/**
* 获取头像上传路径
* 获取头像上传路径
*/
*/
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
View file @
7be17ea8
...
@@ -127,7 +127,7 @@ public class FileUploadUtils
...
@@ -127,7 +127,7 @@ public class FileUploadUtils
return
fileName
;
return
fileName
;
}
}
p
rivate
static
final
File
getAbsoluteFile
(
String
uploadDir
,
String
fileName
)
throws
IOException
p
ublic
static
final
File
getAbsoluteFile
(
String
uploadDir
,
String
fileName
)
throws
IOException
{
{
File
desc
=
new
File
(
uploadDir
+
File
.
separator
+
fileName
);
File
desc
=
new
File
(
uploadDir
+
File
.
separator
+
fileName
);
...
@@ -141,7 +141,7 @@ public class FileUploadUtils
...
@@ -141,7 +141,7 @@ public class FileUploadUtils
return
desc
;
return
desc
;
}
}
p
rivate
static
final
String
getPathFileName
(
String
uploadDir
,
String
fileName
)
throws
IOException
p
ublic
static
final
String
getPathFileName
(
String
uploadDir
,
String
fileName
)
throws
IOException
{
{
int
dirLastIndex
=
RuoYiConfig
.
getProfile
().
length
()
+
1
;
int
dirLastIndex
=
RuoYiConfig
.
getProfile
().
length
()
+
1
;
String
currentDir
=
StringUtils
.
substring
(
uploadDir
,
dirLastIndex
);
String
currentDir
=
StringUtils
.
substring
(
uploadDir
,
dirLastIndex
);
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
View file @
7be17ea8
...
@@ -3,6 +3,7 @@ package com.ruoyi.common.utils.file;
...
@@ -3,6 +3,7 @@ package com.ruoyi.common.utils.file;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.OutputStream
;
import
java.io.UnsupportedEncodingException
;
import
java.io.UnsupportedEncodingException
;
...
@@ -10,8 +11,12 @@ import java.net.URLEncoder;
...
@@ -10,8 +11,12 @@ import java.net.URLEncoder;
import
java.nio.charset.StandardCharsets
;
import
java.nio.charset.StandardCharsets
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.commons.io.IOUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
com.ruoyi.common.config.RuoYiConfig
;
import
com.ruoyi.common.utils.DateUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.uuid.IdUtils
;
/**
/**
* 文件处理工具类
* 文件处理工具类
...
@@ -53,29 +58,48 @@ public class FileUtils
...
@@ -53,29 +58,48 @@ public class FileUtils
}
}
finally
finally
{
{
if
(
os
!=
null
)
IOUtils
.
close
(
os
);
{
IOUtils
.
close
(
fis
);
try
}
{
}
os
.
close
();
}
/**
catch
(
IOException
e1
)
* 写数据到文件中
{
*
e1
.
printStackTrace
();
* @param data 数据
}
* @return 目标文件
}
* @throws IOException IO异常
if
(
fis
!=
null
)
*/
{
public
static
String
writeImportBytes
(
byte
[]
data
)
throws
IOException
try
{
{
return
writeBytes
(
data
,
RuoYiConfig
.
getImportPath
());
fis
.
close
();
}
}
catch
(
IOException
e1
)
/**
{
* 写数据到文件中
e1
.
printStackTrace
();
*
}
* @param data 数据
}
* @param uploadDir 目标文件
* @return 目标文件
* @throws IOException IO异常
*/
public
static
String
writeBytes
(
byte
[]
data
,
String
uploadDir
)
throws
IOException
{
FileOutputStream
fos
=
null
;
String
pathName
=
""
;
try
{
String
extension
=
getFileExtendName
(
data
);
pathName
=
DateUtils
.
datePath
()
+
"/"
+
IdUtils
.
fastUUID
()
+
"."
+
extension
;
File
file
=
FileUploadUtils
.
getAbsoluteFile
(
uploadDir
,
pathName
);
fos
=
new
FileOutputStream
(
file
);
fos
.
write
(
data
);
}
}
finally
{
IOUtils
.
close
(
fos
);
}
return
FileUploadUtils
.
getPathFileName
(
uploadDir
,
pathName
);
}
}
/**
/**
...
@@ -200,4 +224,33 @@ public class FileUtils
...
@@ -200,4 +224,33 @@ public class FileUtils
String
encode
=
URLEncoder
.
encode
(
s
,
StandardCharsets
.
UTF_8
.
toString
());
String
encode
=
URLEncoder
.
encode
(
s
,
StandardCharsets
.
UTF_8
.
toString
());
return
encode
.
replaceAll
(
"\\+"
,
"%20"
);
return
encode
.
replaceAll
(
"\\+"
,
"%20"
);
}
}
/**
* 获取图像后缀
*
* @param photoByte 图像数据
* @return 后缀名
*/
public
static
String
getFileExtendName
(
byte
[]
photoByte
)
{
String
strFileExtendName
=
"jpg"
;
if
((
photoByte
[
0
]
==
71
)
&&
(
photoByte
[
1
]
==
73
)
&&
(
photoByte
[
2
]
==
70
)
&&
(
photoByte
[
3
]
==
56
)
&&
((
photoByte
[
4
]
==
55
)
||
(
photoByte
[
4
]
==
57
))
&&
(
photoByte
[
5
]
==
97
))
{
strFileExtendName
=
"gif"
;
}
else
if
((
photoByte
[
6
]
==
74
)
&&
(
photoByte
[
7
]
==
70
)
&&
(
photoByte
[
8
]
==
73
)
&&
(
photoByte
[
9
]
==
70
))
{
strFileExtendName
=
"jpg"
;
}
else
if
((
photoByte
[
0
]
==
66
)
&&
(
photoByte
[
1
]
==
77
))
{
strFileExtendName
=
"bmp"
;
}
else
if
((
photoByte
[
1
]
==
80
)
&&
(
photoByte
[
2
]
==
78
)
&&
(
photoByte
[
3
]
==
71
))
{
strFileExtendName
=
"png"
;
}
return
strFileExtendName
;
}
}
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
View file @
7be17ea8
...
@@ -18,6 +18,8 @@ import java.util.Map;
...
@@ -18,6 +18,8 @@ import java.util.Map;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.UUID
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.poi.ooxml.POIXMLDocumentPart
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.CellStyle
;
...
@@ -32,15 +34,23 @@ import org.apache.poi.ss.usermodel.FillPatternType;
...
@@ -32,15 +34,23 @@ import org.apache.poi.ss.usermodel.FillPatternType;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.PictureData
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
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.CellRangeAddressList
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFClientAnchor
;
import
org.apache.poi.xssf.usermodel.XSSFClientAnchor
;
import
org.apache.poi.xssf.usermodel.XSSFDataValidation
;
import
org.apache.poi.xssf.usermodel.XSSFDataValidation
;
import
org.apache.poi.xssf.usermodel.XSSFDrawing
;
import
org.apache.poi.xssf.usermodel.XSSFPicture
;
import
org.apache.poi.xssf.usermodel.XSSFShape
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
com.ruoyi.common.annotation.Excel
;
import
com.ruoyi.common.annotation.Excel
;
...
@@ -55,6 +65,7 @@ import com.ruoyi.common.utils.DateUtils;
...
@@ -55,6 +65,7 @@ import com.ruoyi.common.utils.DateUtils;
import
com.ruoyi.common.utils.DictUtils
;
import
com.ruoyi.common.utils.DictUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.file.FileTypeUtils
;
import
com.ruoyi.common.utils.file.FileTypeUtils
;
import
com.ruoyi.common.utils.file.FileUtils
;
import
com.ruoyi.common.utils.file.ImageUtils
;
import
com.ruoyi.common.utils.file.ImageUtils
;
import
com.ruoyi.common.utils.reflect.ReflectUtils
;
import
com.ruoyi.common.utils.reflect.ReflectUtils
;
...
@@ -116,12 +127,12 @@ public class ExcelUtil<T>
...
@@ -116,12 +127,12 @@ public class ExcelUtil<T>
* 统计列表
* 统计列表
*/
*/
private
Map
<
Integer
,
Double
>
statistics
=
new
HashMap
<
Integer
,
Double
>();
private
Map
<
Integer
,
Double
>
statistics
=
new
HashMap
<
Integer
,
Double
>();
/**
/**
* 数字格式
* 数字格式
*/
*/
private
static
final
DecimalFormat
DOUBLE_FORMAT
=
new
DecimalFormat
(
"######0.00"
);
private
static
final
DecimalFormat
DOUBLE_FORMAT
=
new
DecimalFormat
(
"######0.00"
);
/**
/**
* 实体对象
* 实体对象
*/
*/
...
@@ -168,24 +179,15 @@ public class ExcelUtil<T>
...
@@ -168,24 +179,15 @@ public class ExcelUtil<T>
this
.
type
=
Type
.
IMPORT
;
this
.
type
=
Type
.
IMPORT
;
this
.
wb
=
WorkbookFactory
.
create
(
is
);
this
.
wb
=
WorkbookFactory
.
create
(
is
);
List
<
T
>
list
=
new
ArrayList
<
T
>();
List
<
T
>
list
=
new
ArrayList
<
T
>();
Sheet
sheet
=
null
;
// 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet
if
(
StringUtils
.
isNotEmpty
(
sheetName
))
Sheet
sheet
=
StringUtils
.
isNotEmpty
(
sheetName
)
?
wb
.
getSheet
(
sheetName
)
:
wb
.
getSheetAt
(
0
);
{
// 如果指定sheet名,则取指定sheet中的内容.
sheet
=
wb
.
getSheet
(
sheetName
);
}
else
{
// 如果传入的sheet名不存在则默认指向第1个sheet.
sheet
=
wb
.
getSheetAt
(
0
);
}
if
(
sheet
==
null
)
if
(
sheet
==
null
)
{
{
throw
new
IOException
(
"文件sheet不存在"
);
throw
new
IOException
(
"文件sheet不存在"
);
}
}
Map
<
String
,
PictureData
>
pictures
=
getSheetPictrues
((
XSSFSheet
)
sheet
,
(
XSSFWorkbook
)
wb
);
int
rows
=
sheet
.
getPhysicalNumberOfRows
();
// 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
int
rows
=
sheet
.
getLastRowNum
();
if
(
rows
>
0
)
if
(
rows
>
0
)
{
{
...
@@ -225,11 +227,12 @@ public class ExcelUtil<T>
...
@@ -225,11 +227,12 @@ public class ExcelUtil<T>
}
}
}
}
}
}
for
(
int
i
=
1
;
i
<
rows
;
i
++)
for
(
int
i
=
1
;
i
<
=
rows
;
i
++)
{
{
// 从第2行开始取数据,默认第一行是表头.
// 从第2行开始取数据,默认第一行是表头.
Row
row
=
sheet
.
getRow
(
i
);
Row
row
=
sheet
.
getRow
(
i
);
if
(
row
==
null
)
// 判断当前行是否是空行
if
(
isRowEmpty
(
row
))
{
{
continue
;
continue
;
}
}
...
@@ -315,6 +318,20 @@ public class ExcelUtil<T>
...
@@ -315,6 +318,20 @@ public class ExcelUtil<T>
{
{
val
=
reverseDictByExp
(
Convert
.
toStr
(
val
),
attr
.
dictType
(),
attr
.
separator
());
val
=
reverseDictByExp
(
Convert
.
toStr
(
val
),
attr
.
dictType
(),
attr
.
separator
());
}
}
else
if
(
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
if
(
StringUtils
.
isNull
(
pictures
))
{
val
=
""
;
}
PictureData
image
=
pictures
.
get
(
row
.
getRowNum
()
+
"_"
+
entry
.
getKey
());
if
(
image
==
null
)
{
val
=
""
;
}
byte
[]
data
=
image
.
getData
();
val
=
FileUtils
.
writeImportBytes
(
data
);
}
ReflectUtils
.
invokeSetter
(
entity
,
propertyName
,
val
);
ReflectUtils
.
invokeSetter
(
entity
,
propertyName
,
val
);
}
}
}
}
...
@@ -337,6 +354,23 @@ public class ExcelUtil<T>
...
@@ -337,6 +354,23 @@ public class ExcelUtil<T>
return
exportExcel
();
return
exportExcel
();
}
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param response 返回数据
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @return 结果
* @throws IOException
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
throws
IOException
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
list
,
sheetName
,
Type
.
EXPORT
);
exportExcel
(
response
.
getOutputStream
());
}
/**
/**
* 对list数据源将其里面的数据导入到excel表单
* 对list数据源将其里面的数据导入到excel表单
*
*
...
@@ -349,6 +383,43 @@ public class ExcelUtil<T>
...
@@ -349,6 +383,43 @@ public class ExcelUtil<T>
return
exportExcel
();
return
exportExcel
();
}
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @return 结果
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
throws
IOException
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
null
,
sheetName
,
Type
.
IMPORT
);
exportExcel
(
response
.
getOutputStream
());
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @return 结果
*/
public
void
exportExcel
(
OutputStream
out
)
{
try
{
writeSheet
();
wb
.
write
(
out
);
}
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
}
finally
{
IOUtils
.
closeQuietly
(
wb
);
IOUtils
.
closeQuietly
(
out
);
}
}
/**
/**
* 对list数据源将其里面的数据导入到excel表单
* 对list数据源将其里面的数据导入到excel表单
*
*
...
@@ -359,27 +430,7 @@ public class ExcelUtil<T>
...
@@ -359,27 +430,7 @@ public class ExcelUtil<T>
OutputStream
out
=
null
;
OutputStream
out
=
null
;
try
try
{
{
// 取出一共有多少个sheet.
writeSheet
();
double
sheetNo
=
Math
.
ceil
(
list
.
size
()
/
sheetSize
);
for
(
int
index
=
0
;
index
<=
sheetNo
;
index
++)
{
createSheet
(
sheetNo
,
index
);
// 产生一行
Row
row
=
sheet
.
createRow
(
0
);
int
column
=
0
;
// 写入各个字段的列头名称
for
(
Object
[]
os
:
fields
)
{
Excel
excel
=
(
Excel
)
os
[
1
];
this
.
createCell
(
excel
,
row
,
column
++);
}
if
(
Type
.
EXPORT
.
equals
(
type
))
{
fillExcelData
(
index
,
row
);
addStatisticsRow
();
}
}
String
filename
=
encodingFilename
(
sheetName
);
String
filename
=
encodingFilename
(
sheetName
);
out
=
new
FileOutputStream
(
getAbsoluteFile
(
filename
));
out
=
new
FileOutputStream
(
getAbsoluteFile
(
filename
));
wb
.
write
(
out
);
wb
.
write
(
out
);
...
@@ -392,27 +443,35 @@ public class ExcelUtil<T>
...
@@ -392,27 +443,35 @@ public class ExcelUtil<T>
}
}
finally
finally
{
{
if
(
wb
!=
null
)
IOUtils
.
closeQuietly
(
wb
);
IOUtils
.
closeQuietly
(
out
);
}
}
/**
* 创建写入数据到Sheet
*/
public
void
writeSheet
()
{
// 取出一共有多少个sheet.
double
sheetNo
=
Math
.
ceil
(
list
.
size
()
/
sheetSize
);
for
(
int
index
=
0
;
index
<=
sheetNo
;
index
++)
{
createSheet
(
sheetNo
,
index
);
// 产生一行
Row
row
=
sheet
.
createRow
(
0
);
int
column
=
0
;
// 写入各个字段的列头名称
for
(
Object
[]
os
:
fields
)
{
{
try
Excel
excel
=
(
Excel
)
os
[
1
];
{
this
.
createCell
(
excel
,
row
,
column
++);
wb
.
close
();
}
catch
(
IOException
e1
)
{
e1
.
printStackTrace
();
}
}
}
if
(
out
!=
null
)
if
(
Type
.
EXPORT
.
equals
(
type
)
)
{
{
try
fillExcelData
(
index
,
row
);
{
addStatisticsRow
();
out
.
close
();
}
catch
(
IOException
e1
)
{
e1
.
printStackTrace
();
}
}
}
}
}
}
}
...
@@ -484,7 +543,7 @@ public class ExcelUtil<T>
...
@@ -484,7 +543,7 @@ public class ExcelUtil<T>
headerFont
.
setColor
(
IndexedColors
.
WHITE
.
getIndex
());
headerFont
.
setColor
(
IndexedColors
.
WHITE
.
getIndex
());
style
.
setFont
(
headerFont
);
style
.
setFont
(
headerFont
);
styles
.
put
(
"header"
,
style
);
styles
.
put
(
"header"
,
style
);
style
=
wb
.
createCellStyle
();
style
=
wb
.
createCellStyle
();
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
...
@@ -548,8 +607,7 @@ public class ExcelUtil<T>
...
@@ -548,8 +607,7 @@ public class ExcelUtil<T>
}
}
else
if
(
ColumnType
.
IMAGE
==
attr
.
cellType
())
else
if
(
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
{
ClientAnchor
anchor
=
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
cell
.
getColumnIndex
(),
cell
.
getRow
().
getRowNum
(),
(
short
)
(
cell
.
getColumnIndex
()
+
1
),
ClientAnchor
anchor
=
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
cell
.
getColumnIndex
(),
cell
.
getRow
().
getRowNum
(),
(
short
)
(
cell
.
getColumnIndex
()
+
1
),
cell
.
getRow
().
getRowNum
()
+
1
);
cell
.
getRow
().
getRowNum
()
+
1
);
String
imagePath
=
Convert
.
toStr
(
value
);
String
imagePath
=
Convert
.
toStr
(
value
);
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
{
{
...
@@ -559,7 +617,7 @@ public class ExcelUtil<T>
...
@@ -559,7 +617,7 @@ public class ExcelUtil<T>
}
}
}
}
}
}
/**
/**
* 获取画布
* 获取画布
*/
*/
...
@@ -802,7 +860,7 @@ public class ExcelUtil<T>
...
@@ -802,7 +860,7 @@ public class ExcelUtil<T>
}
}
return
StringUtils
.
stripEnd
(
propertyString
.
toString
(),
separator
);
return
StringUtils
.
stripEnd
(
propertyString
.
toString
(),
separator
);
}
}
/**
/**
* 解析字典值
* 解析字典值
*
*
...
@@ -828,7 +886,7 @@ public class ExcelUtil<T>
...
@@ -828,7 +886,7 @@ public class ExcelUtil<T>
{
{
return
DictUtils
.
getDictValue
(
dictType
,
dictLabel
,
separator
);
return
DictUtils
.
getDictValue
(
dictType
,
dictLabel
,
separator
);
}
}
/**
/**
* 合计统计信息
* 合计统计信息
*/
*/
...
@@ -859,13 +917,12 @@ public class ExcelUtil<T>
...
@@ -859,13 +917,12 @@ public class ExcelUtil<T>
{
{
if
(
statistics
.
size
()
>
0
)
if
(
statistics
.
size
()
>
0
)
{
{
Cell
cell
=
null
;
Row
row
=
sheet
.
createRow
(
sheet
.
getLastRowNum
()
+
1
);
Row
row
=
sheet
.
createRow
(
sheet
.
getLastRowNum
()
+
1
);
Set
<
Integer
>
keys
=
statistics
.
keySet
();
Set
<
Integer
>
keys
=
statistics
.
keySet
();
cell
=
row
.
createCell
(
0
);
Cell
cell
=
row
.
createCell
(
0
);
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellValue
(
"合计"
);
cell
.
setCellValue
(
"合计"
);
for
(
Integer
key
:
keys
)
for
(
Integer
key
:
keys
)
{
{
cell
=
row
.
createCell
(
key
);
cell
=
row
.
createCell
(
key
);
...
@@ -983,7 +1040,7 @@ public class ExcelUtil<T>
...
@@ -983,7 +1040,7 @@ public class ExcelUtil<T>
this
.
fields
=
this
.
fields
.
stream
().
sorted
(
Comparator
.
comparing
(
objects
->
((
Excel
)
objects
[
1
]).
sort
())).
collect
(
Collectors
.
toList
());
this
.
fields
=
this
.
fields
.
stream
().
sorted
(
Comparator
.
comparing
(
objects
->
((
Excel
)
objects
[
1
]).
sort
())).
collect
(
Collectors
.
toList
());
this
.
maxHeight
=
getRowHeight
();
this
.
maxHeight
=
getRowHeight
();
}
}
/**
/**
* 根据注解获取最大行高
* 根据注解获取最大行高
*/
*/
...
@@ -1097,4 +1154,59 @@ public class ExcelUtil<T>
...
@@ -1097,4 +1154,59 @@ public class ExcelUtil<T>
}
}
return
val
;
return
val
;
}
}
/**
* 判断是否是空行
*
* @param row 判断的行
* @return
*/
private
boolean
isRowEmpty
(
Row
row
)
{
if
(
row
==
null
)
{
return
true
;
}
for
(
int
i
=
row
.
getFirstCellNum
();
i
<
row
.
getLastCellNum
();
i
++)
{
Cell
cell
=
row
.
getCell
(
i
);
if
(
cell
!=
null
&&
cell
.
getCellType
()
!=
CellType
.
BLANK
)
{
return
false
;
}
}
return
true
;
}
/**
* 获取Excel图片
*
* @param sheet 当前sheet对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictrues
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
for
(
POIXMLDocumentPart
dr
:
sheet
.
getRelations
())
{
if
(
dr
instanceof
XSSFDrawing
)
{
XSSFDrawing
drawing
=
(
XSSFDrawing
)
dr
;
List
<
XSSFShape
>
shapes
=
drawing
.
getShapes
();
for
(
XSSFShape
shape
:
shapes
)
{
if
(
shape
instanceof
XSSFPicture
)
{
XSSFPicture
pic
=
(
XSSFPicture
)
shape
;
XSSFClientAnchor
anchor
=
pic
.
getPreferredSize
();
CTMarker
ctMarker
=
anchor
.
getFrom
();
String
picIndex
=
ctMarker
.
getRow
()
+
"_"
+
ctMarker
.
getCol
();
sheetIndexPicMap
.
put
(
picIndex
,
pic
.
getPictureData
());
}
}
}
}
return
sheetIndexPicMap
;
}
}
}
\ No newline at end of file
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