Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
polysoft-nafmii
/
polysoft-parent
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 88e59965
authored
Apr 29, 2021
by
zhoujinghao
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
导入相关工具加入
1 parent
3e471276
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
452 additions
and
0 deletions
nafmii-common/pom.xml
nafmii-common/src/main/java/org/nafmii/common/excle/annotation/ExcelField.java
nafmii-common/src/main/java/org/nafmii/common/excle/test.java
nafmii-common/src/main/java/org/nafmii/common/utils/ImportExcelUtils.java
nafmii-common/pom.xml
View file @
88e5996
...
@@ -162,6 +162,11 @@
...
@@ -162,6 +162,11 @@
<version>
3.9
</version>
<version>
3.9
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
2.1.6
</version>
</dependency>
<dependency>
<groupId>
javax.cache
</groupId>
<groupId>
javax.cache
</groupId>
<artifactId>
cache-api
</artifactId>
<artifactId>
cache-api
</artifactId>
<version>
1.1.0
</version>
<version>
1.1.0
</version>
...
...
nafmii-common/src/main/java/org/nafmii/common/excle/annotation/ExcelField.java
0 → 100644
View file @
88e5996
package
org
.
nafmii
.
common
.
excle
.
annotation
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* Excel注解定义
* Created by tianc on 17/8/25.
*/
@Target
({
ElementType
.
METHOD
,
ElementType
.
FIELD
,
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
ExcelField
{
/**
* 导出字段名(默认调用当前字段的“get”方法,如指定导出字段为对象,请填写“对象名.对象属性”,例:“area.name”、“office.name”)
*/
String
value
()
default
""
;
/**
* 导出字段标题(需要添加批注请用“**”分隔,标题**批注,仅对导出模板有效)
*/
String
title
();
/**
* 字段类型(0:导出导入;1:仅导出;2:仅导入)
*/
int
type
()
default
0
;
/**
* 导出字段对齐方式(0:自动;1:靠左;2:居中;3:靠右)
*/
int
align
()
default
0
;
/**
* 导出字段字段排序(升序)
*/
int
sort
()
default
0
;
/**
* 如果是字典类型,请设置字典的type值
*/
String
dictType
()
default
""
;
/**
* 反射类型
*/
Class
<?>
fieldType
()
default
Class
.
class
;
/**
* 字段归属组(根据分组导出导入)
*/
int
[]
groups
()
default
{};
}
nafmii-common/src/main/java/org/nafmii/common/excle/test.java
0 → 100644
View file @
88e5996
package
org
.
nafmii
.
common
.
excle
;
/**
* @author:zhoujh
* @Function:TODO
* @date 2021/4/29 15:35
* @ClassName:
* @version:
* @remark:
*/
public
class
test
{
}
nafmii-common/src/main/java/org/nafmii/common/utils/ImportExcelUtils.java
0 → 100644
View file @
88e5996
package
org
.
nafmii
.
common
.
utils
;
import
com.google.common.collect.Lists
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.openxml4j.exceptions.InvalidFormatException
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.nafmii.common.excle.Reflections
;
import
org.nafmii.common.excle.annotation.ExcelField
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.List
;
/**
* 导入Excel文件(支持“XLS”和“XLS”格式)
* Created by tianc on 17/8/25.
*/
public
class
ImportExcelUtils
{
private
static
Logger
log
=
LoggerFactory
.
getLogger
(
ImportExcelUtils
.
class
);
/**
* 工作薄对象
*/
private
Workbook
wb
;
/**
* 工作表对象
*/
private
Sheet
sheet
;
/**
* 标题行号
*/
private
int
headerNum
;
/**
* 构造函数
*
* @param fileName 导入文件,读取第一个工作表
* @param headerNum 标题行号,数据行号=标题行号+1
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
String
fileName
,
int
headerNum
)
throws
InvalidFormatException
,
IOException
{
this
(
new
File
(
fileName
),
headerNum
);
}
/**
* 构造函数
*
* @param file 导入文件对象,读取第一个工作表
* @param headerNum 标题行号,数据行号=标题行号+1
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
File
file
,
int
headerNum
)
throws
InvalidFormatException
,
IOException
{
this
(
file
,
headerNum
,
0
);
}
/**
* 构造函数
*
* @param fileName 导入文件
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
String
fileName
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
this
(
new
File
(
fileName
),
headerNum
,
sheetIndex
);
}
/**
* 构造函数
*
* @param file 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
File
file
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
this
(
file
.
getName
(),
new
FileInputStream
(
file
),
headerNum
,
sheetIndex
);
}
/**
* 构造函数
*
* @param multipartFile 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
MultipartFile
multipartFile
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
this
(
multipartFile
.
getOriginalFilename
(),
multipartFile
.
getInputStream
(),
headerNum
,
sheetIndex
);
}
/**
* 构造函数
*
* @param fileName 导入文件对象
* @param headerNum 标题行号,数据行号=标题行号+1
* @param sheetIndex 工作表编号
* @throws InvalidFormatException
* @throws IOException
*/
public
ImportExcelUtils
(
String
fileName
,
InputStream
is
,
int
headerNum
,
int
sheetIndex
)
throws
InvalidFormatException
,
IOException
{
try
{
if
(
fileName
==
null
||
fileName
==
""
)
{
throw
new
RuntimeException
(
"导入文档为空!"
);
}
else
if
(
fileName
.
toLowerCase
().
endsWith
(
"xls"
))
{
this
.
wb
=
new
HSSFWorkbook
(
is
);
}
else
if
(
fileName
.
toLowerCase
().
endsWith
(
"xlsx"
))
{
this
.
wb
=
new
XSSFWorkbook
(
is
);
}
else
{
throw
new
RuntimeException
(
"文档格式不正确!"
);
}
if
(
this
.
wb
.
getNumberOfSheets
()
<
sheetIndex
)
{
throw
new
RuntimeException
(
"文档中没有工作表!"
);
}
this
.
sheet
=
this
.
wb
.
getSheetAt
(
sheetIndex
);
this
.
headerNum
=
headerNum
;
log
.
debug
(
"Initialize success."
);
}
finally
{
is
.
close
();
}
}
/**
* 获取行对象
*
* @param rownum
* @return
*/
public
Row
getRow
(
int
rownum
)
{
return
this
.
sheet
.
getRow
(
rownum
);
}
/**
* 获取数据行号
*
* @return
*/
public
int
getDataRowNum
()
{
return
headerNum
+
1
;
}
/**
* 获取最后一个数据行号
*
* @return
*/
public
int
getLastDataRowNum
()
{
return
this
.
sheet
.
getLastRowNum
()
+
headerNum
;
}
/**
* 获取最后一个列号
*
* @return
*/
public
int
getLastCellNum
()
{
return
this
.
getRow
(
headerNum
).
getLastCellNum
();
}
/**
* 获取单元格值
*
* @param row 获取的行
* @param column 获取单元格列号
* @return 单元格值
*/
public
Object
getCellValue
(
Row
row
,
int
column
)
{
Object
val
=
""
;
try
{
Cell
cell
=
row
.
getCell
(
column
);
if
(
cell
!=
null
)
{
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_NUMERIC
)
{
val
=
cell
.
getNumericCellValue
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_STRING
)
{
val
=
cell
.
getStringCellValue
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_FORMULA
)
{
val
=
cell
.
getCellFormula
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_BOOLEAN
)
{
val
=
cell
.
getBooleanCellValue
();
}
else
if
(
cell
.
getCellType
()
==
Cell
.
CELL_TYPE_ERROR
)
{
val
=
cell
.
getErrorCellValue
();
}
}
}
catch
(
Exception
e
)
{
return
val
;
}
return
val
;
}
/**
* 获取导入数据列表
*
* @param cls 导入对象类型
* @param groups 导入分组
*/
public
<
E
>
List
<
E
>
getDataList
(
Class
<
E
>
cls
,
int
...
groups
)
throws
InstantiationException
,
IllegalAccessException
{
List
<
Object
[]>
annotationList
=
Lists
.
newArrayList
();
// Get annotation field
Field
[]
fs
=
cls
.
getDeclaredFields
();
for
(
Field
f
:
fs
)
{
ExcelField
ef
=
f
.
getAnnotation
(
ExcelField
.
class
);
if
(
ef
!=
null
&&
(
ef
.
type
()
==
0
||
ef
.
type
()
==
2
))
{
if
(
groups
!=
null
&&
groups
.
length
>
0
)
{
boolean
inGroup
=
false
;
for
(
int
g
:
groups
)
{
if
(
inGroup
)
{
break
;
}
for
(
int
efg
:
ef
.
groups
())
{
if
(
g
==
efg
)
{
inGroup
=
true
;
annotationList
.
add
(
new
Object
[]{
ef
,
f
});
break
;
}
}
}
}
else
{
annotationList
.
add
(
new
Object
[]{
ef
,
f
});
}
}
}
// Get annotation method
Method
[]
ms
=
cls
.
getDeclaredMethods
();
for
(
Method
m
:
ms
)
{
ExcelField
ef
=
m
.
getAnnotation
(
ExcelField
.
class
);
if
(
ef
!=
null
&&
(
ef
.
type
()
==
0
||
ef
.
type
()
==
2
))
{
if
(
groups
!=
null
&&
groups
.
length
>
0
)
{
boolean
inGroup
=
false
;
for
(
int
g
:
groups
)
{
if
(
inGroup
)
{
break
;
}
for
(
int
efg
:
ef
.
groups
())
{
if
(
g
==
efg
)
{
inGroup
=
true
;
annotationList
.
add
(
new
Object
[]{
ef
,
m
});
break
;
}
}
}
}
else
{
annotationList
.
add
(
new
Object
[]{
ef
,
m
});
}
}
}
// Field sorting
Collections
.
sort
(
annotationList
,
new
Comparator
<
Object
[]>()
{
public
int
compare
(
Object
[]
o1
,
Object
[]
o2
)
{
return
new
Integer
(((
ExcelField
)
o1
[
0
]).
sort
()).
compareTo
(
new
Integer
(((
ExcelField
)
o2
[
0
]).
sort
()));
}
});
//log.debug("Import column count:"+annotationList.size());
// Get excel data
List
<
E
>
dataList
=
Lists
.
newArrayList
();
for
(
int
i
=
this
.
getDataRowNum
();
i
<
this
.
getLastDataRowNum
();
i
++)
{
E
e
=
cls
.
newInstance
();
int
column
=
0
;
Row
row
=
this
.
getRow
(
i
);
StringBuilder
sb
=
new
StringBuilder
();
for
(
Object
[]
os
:
annotationList
)
{
Object
val
=
this
.
getCellValue
(
row
,
column
++);
if
(
val
!=
null
)
{
ExcelField
ef
=
(
ExcelField
)
os
[
0
];
// If is dict type, get dict value
// if (StringUtils.isNotBlank(ef.dictType())) {
// val = DictUtils.getDictValue(val.toString(), ef.dictType(), "");
// }
// Get param type and type cast
Class
<?>
valType
=
Class
.
class
;
if
(
os
[
1
]
instanceof
Field
)
{
valType
=
((
Field
)
os
[
1
]).
getType
();
}
else
if
(
os
[
1
]
instanceof
Method
)
{
Method
method
=
((
Method
)
os
[
1
]);
if
(
"get"
.
equals
(
method
.
getName
().
substring
(
0
,
3
)))
{
valType
=
method
.
getReturnType
();
}
else
if
(
"set"
.
equals
(
method
.
getName
().
substring
(
0
,
3
)))
{
valType
=
((
Method
)
os
[
1
]).
getParameterTypes
()[
0
];
}
}
//log.debug("Import value type: ["+i+","+column+"] " + valType);
try
{
if
(
valType
==
String
.
class
)
{
String
s
=
String
.
valueOf
(
val
.
toString
());
if
(
s
.
endsWith
(
".0"
))
{
val
=
StringUtils
.
substringBefore
(
s
,
".0"
);
}
else
{
val
=
String
.
valueOf
(
val
.
toString
());
}
}
else
if
(
valType
==
Integer
.
class
)
{
val
=
Double
.
valueOf
(
val
.
toString
()).
intValue
();
}
else
if
(
valType
==
Long
.
class
)
{
val
=
Double
.
valueOf
(
val
.
toString
()).
longValue
();
}
else
if
(
valType
==
Double
.
class
)
{
val
=
Double
.
valueOf
(
val
.
toString
());
}
else
if
(
valType
==
Float
.
class
)
{
val
=
Float
.
valueOf
(
val
.
toString
());
}
else
if
(
valType
==
Date
.
class
)
{
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
}
else
{
if
(
ef
.
fieldType
()
!=
Class
.
class
)
{
val
=
ef
.
fieldType
().
getMethod
(
"getValue"
,
String
.
class
).
invoke
(
null
,
val
.
toString
());
}
else
{
val
=
Class
.
forName
(
this
.
getClass
().
getName
().
replaceAll
(
this
.
getClass
().
getSimpleName
(),
"fieldtype."
+
valType
.
getSimpleName
()
+
"Type"
)).
getMethod
(
"getValue"
,
String
.
class
).
invoke
(
null
,
val
.
toString
());
}
}
}
catch
(
Exception
ex
)
{
log
.
info
(
"Get cell value ["
+
i
+
","
+
column
+
"] error: "
+
ex
.
toString
());
val
=
null
;
}
// set entity value
if
(
os
[
1
]
instanceof
Field
)
{
Reflections
.
invokeSetter
(
e
,
((
Field
)
os
[
1
]).
getName
(),
val
);
}
else
if
(
os
[
1
]
instanceof
Method
)
{
String
mthodName
=
((
Method
)
os
[
1
]).
getName
();
if
(
"get"
.
equals
(
mthodName
.
substring
(
0
,
3
)))
{
mthodName
=
"set"
+
StringUtils
.
substringAfter
(
mthodName
,
"get"
);
}
Reflections
.
invokeMethod
(
e
,
mthodName
,
new
Class
[]{
valType
},
new
Object
[]{
val
});
}
}
sb
.
append
(
val
+
", "
);
}
dataList
.
add
(
e
);
log
.
debug
(
"Read success: ["
+
i
+
"] "
+
sb
.
toString
());
}
return
dataList
;
}
/**
* 导入测试
*/
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
// File file = new File("D:\\excle");
// if (!file.exists()){
// file.getParentFile().mkdir();
// }
ImportExcelUtils
ei
=
new
ImportExcelUtils
(
"D:\\excle/test1.xlsx"
,
1
);
for
(
int
i
=
ei
.
getDataRowNum
();
i
<
ei
.
getLastDataRowNum
();
i
++)
{
Row
row
=
ei
.
getRow
(
i
);
for
(
int
j
=
0
;
j
<
ei
.
getLastCellNum
();
j
++)
{
Object
val
=
ei
.
getCellValue
(
row
,
j
);
System
.
out
.
print
(
val
+
", "
);
}
System
.
out
.
print
(
"\n"
);
}
}
}
Write
Preview
Markdown
is supported
Attach a file
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 post a comment