生活随笔
收集整理的這篇文章主要介紹了
【JAVA】读取excel导入数据库,形成树状结构
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近需要導(dǎo)入一個excel表格,存到數(shù)據(jù)庫并以樹狀結(jié)構(gòu)讀取出來
下面兩張圖片是需要導(dǎo)入的excel
@Transactional(rollbackFor
= Exception.class)public String import(MultipartFile file
, Integer projectId
) throws Exception {InputStream inputStream
= file
.getInputStream();Workbook workbook
= new XSSFWorkbook(inputStream
);Sheet sheet
= workbook
.getSheetAt(0);long cellId
= 0;ProjectManager one
= projectManagerService
.lambdaQuery().select(ProjectManager::getProjectName).eq(ProjectManager::getId, projectId
).one();int rows
= sheet
.getPhysicalNumberOfRows();if (rows
> 1) {for (int k
= 1; k
< rows
; k
++) {Row row
= sheet
.getRow(k
);int physical
= sheet
.getRow(k
).getPhysicalNumberOfCells();if (row
!= null && physical
> 3) {Cell cell1
= row
.getCell(0);if (!(cell1
== null || "".equals(cell1
.toString().trim()))) {IndexInfo one1
= indexInfoService
.lambdaQuery().select(IndexInfo::getIndexPname, IndexInfo::getId).eq(IndexInfo::getIndexPname, cell1
.getStringCellValue()).eq(IndexInfo::getProjectId, projectId
).one();if (one1
== null) {IndexInfo indexInfo
= new IndexInfo();indexInfo
.setIndexPid(0L);indexInfo
.setIndexPname(cell1
.getStringCellValue());indexInfo
.setProjectName(one
.getProjectName());indexInfo
.setProjectId(projectId
);indexInfo
.setIndexClass(2);boolean save
= indexInfoService
.save(indexInfo
);if (save
) {cellId
= indexInfo
.getId();}} else {cellId
= one1
.getId();}}}for (int j
= 1; j
< physical
- 2; j
++) {Cell cell
= row
.getCell(j
);if (!(cell
== null || "".equals(cell
.toString().trim()))) {IndexInfo one1
= indexInfoService
.lambdaQuery().select(IndexInfo::getIndexPname, IndexInfo::getId).eq(IndexInfo::getIndexPname, cell
.getStringCellValue()).eq(IndexInfo::getProjectId, projectId
).one();if (one1
== null) {IndexInfo indexInfo
= new IndexInfo();indexInfo
.setIndexPid(cellId
);indexInfo
.setIndexPname(cell
.getStringCellValue());indexInfo
.setProjectName(one
.getProjectName());indexInfo
.setProjectId(projectId
);indexInfo
.setIndexClass(2);if (j
== physical
- 3) {int score
= 0;String description
= null;for (int i
= 0; i
< 2; i
++) {Cell cell1
= row
.getCell(j
+ i
+ 1);if (!(cell
== null || "".equals(cell
.toString().trim()))) {try {description
= cell1
.getStringCellValue();} catch (Exception e
) {score
= (int) cell1
.getNumericCellValue();}indexInfo
.setIndexScore(score
);indexInfo
.setIndexDescription(description
);}}}boolean save
= indexInfoService
.save(indexInfo
);if (save
) {cellId
= indexInfo
.getId();}} else {cellId
= one1
.getId();}}}}return "文件導(dǎo)入成功";} else {return "導(dǎo)入失敗";}}
還有一個這種的表格,多讀一列就可以了
@Transactional(rollbackFor
= Exception.class)public String import(MultipartFile file
, Integer projectId
) throws Exception {InputStream inputStream
= file
.getInputStream();Workbook workbook
= new XSSFWorkbook(inputStream
);Sheet sheet
= workbook
.getSheetAt(0);long cellId
= 0;ProjectManager one
= projectManagerService
.lambdaQuery().select(ProjectManager::getProjectName).eq(ProjectManager::getId, projectId
).one();int rows
= sheet
.getPhysicalNumberOfRows();if (rows
> 1) {for (int k
= 1; k
< rows
; k
++) {Row row
= sheet
.getRow(k
);int physical
= sheet
.getRow(k
).getPhysicalNumberOfCells();if (row
!= null && physical
> 3) {Cell cell
= row
.getCell(0);if (!(cell
== null || "".equals(cell
.toString().trim()))) {IndexInfo one1
= indexInfoService
.lambdaQuery().select(IndexInfo::getIndexPname, IndexInfo::getId).eq(IndexInfo::getIndexPname, cell
.getStringCellValue()).eq(IndexInfo::getProjectId, projectId
).one();if (one1
== null) {IndexInfo indexInfo
= new IndexInfo();indexInfo
.setIndexPid(0L);indexInfo
.setIndexPname(cell
.getStringCellValue());indexInfo
.setProjectName(one
.getProjectName());indexInfo
.setProjectId(projectId
);indexInfo
.setIndexClass(2);indexInfo
.setIndexWeight(row
.getCell(1).getNumericCellValue());boolean save
= indexInfoService
.save(indexInfo
);if (save
) {cellId
= indexInfo
.getId();}} else {cellId
= one1
.getId();}}}for (int i
= 2; i
< physical
-1; i
+= 2) {Cell cell
= row
.getCell(i
);if (!(cell
== null || "".equals(cell
.toString().trim()))) {IndexInfo one1
= indexInfoService
.lambdaQuery().select(IndexInfo::getIndexPname, IndexInfo::getId).eq(IndexInfo::getIndexPname, cell
.getStringCellValue()).eq(IndexInfo::getProjectId, projectId
).one();if (one1
== null) {IndexInfo indexInfo
= new IndexInfo();indexInfo
.setIndexPid(cellId
);indexInfo
.setProjectName(one
.getProjectName());indexInfo
.setProjectId(projectId
);indexInfo
.setIndexPname(cell
.getStringCellValue());indexInfo
.setIndexClass(2);indexInfo
.setIndexWeight(row
.getCell(i
+1).getNumericCellValue());if (i
== physical
- 3) {indexInfo
.setIndexDescription(row
.getCell(i
+2).getStringCellValue());}boolean save
= indexInfoService
.save(indexInfo
);if (save
) {cellId
= indexInfo
.getId();}} else {cellId
= one1
.getId();}}}}return "導(dǎo)入成功";} elsereturn "導(dǎo)入失敗";}
讀取完成保存到數(shù)據(jù)庫后,形成樹狀結(jié)構(gòu)具體步驟可以看我上一篇帖子
總結(jié)
以上是生活随笔為你收集整理的【JAVA】读取excel导入数据库,形成树状结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。