Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
cae4ba2e
Commit
cae4ba2e
authored
Feb 28, 2024
by
liguofu@yeejoin.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改:【空工大】解析Excel文件,自动创建数据库表和插入数据,并生成数据源
parent
42753a79
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
219 additions
and
0 deletions
+219
-0
ClientHandler.java
.../main/java/com/yeejoin/amos/kgd/config/ClientHandler.java
+0
-0
ExcelTool.java
.../src/main/java/com/yeejoin/amos/kgd/config/ExcelTool.java
+184
-0
TableFieldModel.java
...a/com/yeejoin/amos/kgd/message/model/TableFieldModel.java
+22
-0
TableModel.java
...n/java/com/yeejoin/amos/kgd/message/model/TableModel.java
+13
-0
No files found.
amos-boot-module/amos-boot-module-api/amos-boot-module-kgd-api/src/main/java/com/yeejoin/amos/kgd/config/ClientHandler.java
View file @
cae4ba2e
This diff is collapsed.
Click to expand it.
amos-boot-module/amos-boot-module-api/amos-boot-module-kgd-api/src/main/java/com/yeejoin/amos/kgd/config/ExcelTool.java
0 → 100644
View file @
cae4ba2e
package
com
.
yeejoin
.
amos
.
kgd
.
config
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.poifs.filesystem.POIFSFileSystem
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.text.NumberFormat
;
import
java.util.*
;
public
class
ExcelTool
{
private
static
NumberFormat
numberFormat
=
null
;
/**
* 解析xls和xlsx不兼容问题
*
* @param pfs
* @param workbook
* @param inputStream
* @return
*/
public
static
Workbook
getWorkBook
(
POIFSFileSystem
pfs
,
Workbook
workbook
,
InputStream
inputStream
,
String
filename
)
throws
IOException
{
if
(
filename
.
endsWith
(
"xls"
))
{
pfs
=
new
POIFSFileSystem
(
inputStream
);
workbook
=
new
HSSFWorkbook
(
pfs
);
return
workbook
;
}
else
if
(
filename
.
endsWith
(
"xlsx"
))
{
try
{
workbook
=
new
XSSFWorkbook
(
inputStream
);
return
workbook
;
}
catch
(
IOException
e
)
{
return
null
;
}
}
else
{
return
null
;
}
}
/**
* 解析Excel表头
*
* @param inputStream 文件
* @return
*/
public
static
List
<
String
>
readColumnsFromExcel
(
InputStream
inputStream
,
String
filename
)
throws
Exception
{
POIFSFileSystem
pfs
=
null
;
Workbook
workbook
=
null
;
try
{
// 解析xls和xlsx不兼容问题
workbook
=
getWorkBook
(
pfs
,
workbook
,
inputStream
,
filename
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
Exception
(
"模板保存异常。"
);
}
if
(
workbook
==
null
)
{
throw
new
Exception
(
"请使用模板上传文件"
);
}
// 拿第一个sheet表
Sheet
sheet
=
workbook
.
getSheetAt
(
0
);
// 校验sheet是否合法
if
(
Objects
.
isNull
(
sheet
))
{
return
null
;
}
// 获取第一行数据(假如第一行就是列名)
Row
sheetTitleRow
=
sheet
.
getRow
(
sheet
.
getFirstRowNum
());
// 取出最后一列
short
lastCellNum
=
sheetTitleRow
.
getLastCellNum
();
List
<
String
>
sheetTitleList
=
new
LinkedList
<>();
for
(
int
i
=
0
;
i
<
lastCellNum
;
i
++)
{
// 取出每一列的名
String
cellValue
=
sheetTitleRow
.
getCell
(
i
).
getStringCellValue
();
sheetTitleList
.
add
(
cellValue
);
}
return
sheetTitleList
;
}
/**
* 解析Excel数据
*
* @param inputStream 文件
* @return
*/
public
static
List
<
List
<
String
>>
readDataFromExcel
(
InputStream
inputStream
,
String
filename
)
throws
Exception
{
POIFSFileSystem
pfs
=
null
;
Workbook
workbook
=
null
;
try
{
// 解析xls和xlsx不兼容问题
workbook
=
getWorkBook
(
pfs
,
workbook
,
inputStream
,
filename
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
Exception
(
"模板保存异常。"
);
}
if
(
workbook
==
null
)
{
throw
new
Exception
(
"请使用模板上传文件"
);
}
numberFormat
=
NumberFormat
.
getNumberInstance
();
// 创建一个集合根据下标来确定每个单元格对应对象的什么属性
List
<
List
<
String
>>
resultList
=
new
ArrayList
<>();
// 获取表格第一个sheet的内容
Sheet
sheetAt
=
workbook
.
getSheetAt
(
0
);
// 获得sheet总行数
int
lastRowNum
=
sheetAt
.
getLastRowNum
();
if
(
lastRowNum
<
1
)
{
throw
new
Exception
(
"数据错误"
);
}
// 开始读取,不读取表头所以从第二行开始
for
(
int
i
=
1
;
i
<=
lastRowNum
;
i
++)
{
// 获取每一行
Row
row
=
sheetAt
.
getRow
(
i
);
// 行为空不读取
if
(
row
==
null
)
{
continue
;
}
Cell
cell
=
row
.
getCell
(
0
);
//列为空不读取
if
(
cell
==
null
||
StringUtils
.
isEmpty
(
convertData
(
cell
)))
{
continue
;
}
List
<
String
>
rowList
=
new
ArrayList
<>();
//添加数据
short
lastCellNum
=
row
.
getLastCellNum
();
for
(
int
j
=
0
;
j
<
lastCellNum
;
j
++)
{
Cell
cellOne
=
row
.
getCell
(
j
);
try
{
String
item
=
convertData
(
cellOne
);
rowList
.
add
(
item
.
trim
());
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"-------------------Err-----------------------"
);
System
.
out
.
println
(
i
+
"行"
+
j
+
"列数据转换出现异常"
);
rowList
.
add
(
""
);
}
resultList
.
add
(
rowList
);
}
//规避行数数据后几行为空
if
(
rowList
.
size
()
<
lastCellNum
)
{
for
(
int
k
=
0
;
k
<
15
-
rowList
.
size
();
k
++)
{
rowList
.
add
(
""
);
}
}
}
return
resultList
;
}
/**
* 表格数据转换
*
* @param cell
* @return
*/
public
static
String
convertData
(
Cell
cell
)
{
String
str
=
""
;
switch
(
cell
.
getCellTypeEnum
())
{
case
NUMERIC:
//判断是否是整数
str
=
numberFormat
.
format
(
cell
.
getNumericCellValue
());
break
;
case
STRING:
str
=
cell
.
getStringCellValue
();
break
;
case
FORMULA:
try
{
str
=
String
.
valueOf
(
cell
.
getNumericCellValue
());
}
catch
(
IllegalArgumentException
e
)
{
str
=
String
.
valueOf
(
cell
.
getRichStringCellValue
());
}
break
;
default
:
str
=
""
;
}
return
str
;
}
}
amos-boot-module/amos-boot-module-api/amos-boot-module-kgd-api/src/main/java/com/yeejoin/amos/kgd/message/model/TableFieldModel.java
0 → 100644
View file @
cae4ba2e
package
com
.
yeejoin
.
amos
.
kgd
.
message
.
model
;
import
lombok.Data
;
@Data
public
class
TableFieldModel
{
// 字段类型
private
String
fieldType
=
"String"
;
// 字段名称
private
String
fieldName
;
// 字段长度
private
String
fieldLength
;
// 数值类型时,小数点长度
private
String
decimalPoint
;
// 主键
private
String
primaryKey
;
// 是否为空
private
String
isNull
=
"1"
;
// 不为空时,需设置得值
private
String
fieldRemark
;
}
amos-boot-module/amos-boot-module-api/amos-boot-module-kgd-api/src/main/java/com/yeejoin/amos/kgd/message/model/TableModel.java
0 → 100644
View file @
cae4ba2e
package
com
.
yeejoin
.
amos
.
kgd
.
message
.
model
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
TableModel
{
// 表名称
private
String
tableName
;
// 表字段
private
List
<
TableFieldModel
>
tableFields
;
}
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