最近开发过程中遇到一个Excel的导入的功能,因为导入的数据结构具有层次结构,经过一番研究,最终得以实现,所有写下该文章,记录过程,供以后参考。
下图是导入Excel的数据结构:
使用POI解析Excel,数据封装然后进行入库。下面是核心代码。
@Overridepublic 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解析excelInputStream 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;