最近开发过程中遇到一个Excel的导入的功能,因为导入的数据结构具有层次结构,经过一番研究,最终得以实现,所有写下该文章,记录过程,供以后参考。
下图是导入Excel的数据结构:
使用POI解析Excel,数据封装然后进行入库。下面是核心代码。
@Override
public KnowledgeBaseDictImportRespVO importKnowledgeBaseDict(MultipartFile file) throws IOException {
KnowledgeBaseDictImportRespVO kbdir = KnowledgeBaseDictImportRespVO.builder().build(); // 该对象是方法返回的结果对象
Map<String,String> res = new ConcurrentHashMap<>();
List<String> createProblemsList = new ArrayList<>();
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
if(fileType.equals(".xls") || fileType.equals(".xlsx")) {
AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(SecurityFrameworkUtils.getLoginUserId()).getData();
//poi解析excel
InputStream inputStream = file.getInputStream();
// 读取工作薄 .xls 与 .xlsx 需要创建不通的工作簿 采用工作簿工厂类创建对应的工作簿类
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
//获取系统名称
Row row0 = sheet.getRow(0); // 第一行的表头
Cell cell0 = row0.getCell(0); // 第一列
String belongSystem = cell0.getStringCellValue().trim().replace("系统功能树","");
if (StringUtils.isEmpty(belongSystem)) {
res.put(StrUtils.getRandomString(6),"归属系统不能为空!");
kbdir.setFailureProblems(res);
return kbdir;