当前位置:   article > 正文

Java 使用multipartFile对象解析Execl_multipartfile解析excel

multipartfile解析excel

1.需要使用 multipartFile 包 package org.springframework.web.multipart;

2.数据校验

  1. public String exportVehicleViol(MultipartFile multipartFile) {
  2. try {
  3. //对前端传递的文件进行校验
  4. if (multipartFile == null && multipartFile.getSize() == 0) {
  5. return "文件上传错误,重新上传";
  6. }
  7. //获取文件名称 判断文件是否为 Execl
  8. String filename = multipartFile.getOriginalFilename();
  9. if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
  10. return "文件上传格式有误,请重新上传";
  11. }
  12. List<EhicleViolation> ehicleViolations = null;
  13. InputStream inputStream = multipartFile.getInputStream();
  14. //根据文件格式 对应不同的api解析
  15. if (filename.endsWith(".xlsx")) {
  16. ehicleViolations = readXlsx(inputStream);
  17. } else {
  18. ehicleViolations = readXls(inputStream);
  19. }
  20. //数据保存
  21. saveBatch(ehicleViolations);
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. return JsonResult.Success("导入成功");
  26. }

3.主要解析的业务逻辑

①解析xls

  1. //解析xls
  2. private List<EhicleViolation> readXls(InputStream inputStream) throws IOException {
  3. HSSFWorkbook sheets = new HSSFWorkbook(inputStream);
  4. //读取第一张sheet
  5. HSSFSheet sheetAt = sheets.getSheetAt(0);
  6. List<EhicleViolation> ehicleViolatsion = new ArrayList<>();
  7. //rowNum = 3 从第三行开始获取值
  8. for (int rowNum = 3; rowNum < sheetAt.getLastRowNum(); rowNum++) {
  9. EhicleViolation ehicleViolation = new EhicleViolation();
  10. HSSFRow row = sheetAt.getRow(rowNum);
  11. if (row != null) {
  12. //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
  13. //所以先使用setCellType()方法先将该单元格的类型设置为STRING
  14. //然后poi会根据字符串读取它
  15. row.getCell(0).setCellType(CellType.STRING);
  16. row.getCell(1).setCellType(CellType.STRING);
  17. row.getCell(2).setCellType(CellType.STRING);
  18. row.getCell(3).setCellType(CellType.STRING);
  19. row.getCell(4).setCellType(CellType.STRING);
  20. row.getCell(5).setCellType(CellType.STRING);
  21. row.getCell(6).setCellType(CellType.STRING);
  22. row.getCell(7).setCellType(CellType.STRING);
  23. row.getCell(8).setCellType(CellType.STRING);
  24. String stringCellValue0 = row.getCell(0).getStringCellValue();
  25. String stringCellValue1 = row.getCell(1).getStringCellValue();
  26. if (StringUtils.isNotBlank(stringCellValue1)) {
  27. ehicleViolation.setUserDept(stringCellValue1);
  28. }
  29. //根据自己需要 获取表格中的数据
  30. String stringCellValue2 = row.getCell(2).getStringCellValue();
  31. if (StringUtils.isNotBlank(stringCellValue2)) {
  32. ehicleViolation.setVehicleNumber(stringCellValue2);
  33. } else {
  34. continue;
  35. }
  36. }
  37. EehicleViolations.add(EehicleViolation);
  38. }
  39. return EehicleViolations;
  40. }

②解析xlsx

  1. //解析xlsx
  2. private List<VmsVehicleViolation> readXlsx(InputStream inputStream) throws IOException {
  3. XSSFWorkbook sheets1 = new XSSFWorkbook(inputStream);
  4. XSSFSheet sheetAt1 = sheets1.getSheetAt(0);
  5. List<EhicleViolation> ehicleViolatsion = new ArrayList<>();
  6. //rowNum = 3 从第三行开始获取值
  7. for (int rowNum = 3; rowNum < sheetAt.getLastRowNum(); rowNum++) {
  8. EhicleViolation ehicleViolation = new EhicleViolation();
  9. HSSFRow row = sheetAt.getRow(rowNum);
  10. if (row != null) {
  11. //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
  12. //所以先使用setCellType()方法先将该单元格的类型设置为STRING
  13. //然后poi会根据字符串读取它
  14. row.getCell(0).setCellType(CellType.STRING);
  15. row.getCell(1).setCellType(CellType.STRING);
  16. row.getCell(2).setCellType(CellType.STRING);
  17. row.getCell(3).setCellType(CellType.STRING);
  18. row.getCell(4).setCellType(CellType.STRING);
  19. row.getCell(5).setCellType(CellType.STRING);
  20. row.getCell(6).setCellType(CellType.STRING);
  21. row.getCell(7).setCellType(CellType.STRING);
  22. row.getCell(8).setCellType(CellType.STRING);
  23. String stringCellValue0 = row.getCell(0).getStringCellValue();
  24. String stringCellValue1 = row.getCell(1).getStringCellValue();
  25. if (StringUtils.isNotBlank(stringCellValue1)) {
  26. ehicleViolation.setUserDept(stringCellValue1);
  27. }
  28. //根据自己需要 获取表格中的数据
  29. String stringCellValue2 = row.getCell(2).getStringCellValue();
  30. if (StringUtils.isNotBlank(stringCellValue2)) {
  31. ehicleViolation.setVehicleNumber(stringCellValue2);
  32. } else {
  33. continue;
  34. }
  35. }
  36. EehicleViolations.add(EehicleViolation);
  37. }
  38. return EehicleViolations;
  39. }

注意:对于不同的Execl Java提供了不同的解析对象 

xls使用HSSFWorkbook 对象进行解析 

xlsx使用XSSWorkbook 对象进行解析

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/668835
推荐阅读
相关标签
  

闽ICP备14008679号