IT俱乐部 Java Java如何使用multipartFile对象解析Execl

Java如何使用multipartFile对象解析Execl

Java使用multipartFile对象解析Execl

1.需要使用 multipartFile 包

package org.springframework.web.multipart;

2.数据校验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public String exportVehicleViol(MultipartFile multipartFile) {
        try {
            //对前端传递的文件进行校验
            if (multipartFile == null && multipartFile.getSize() == 0) {
                return "文件上传错误,重新上传";
            }
            //获取文件名称 判断文件是否为 Execl
            String filename = multipartFile.getOriginalFilename();
            if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
                return "文件上传格式有误,请重新上传";
            }
            List ehicleViolations = null;
            InputStream inputStream = multipartFile.getInputStream();
            //根据文件格式 对应不同的api解析
            if (filename.endsWith(".xlsx")) {
                ehicleViolations = readXlsx(inputStream);
            } else {
                ehicleViolations = readXls(inputStream);
            }
            //数据保存
            saveBatch(ehicleViolations);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return JsonResult.Success("导入成功");
    }
  • MultipartFile:这个类是Spring提供的,用于处理文件上传。它代表了上传的文件。
  • 空文件检查:首先检查multipartFile是否为null,以及文件的大小是否为0。如果是,返回错误提示。
  • 文件类型校验:使用getOriginalFilename()获取上传文件的名称,然后检查其后缀是否为.xls.xlsx。如果不符合条件,返回格式错误的提示。
  • 输入流获取:调用multipartFile.getInputStream()获取文件的输入流,准备进行后续解析。
  • 文件解析:根据文件后缀名调用不同的解析方法:

    • 如果是.xlsx,调用readXlsx()方法。
    • 如果是.xls,调用readXls()方法。
  • 数据保存:解析完毕后,调用saveBatch()将解析的数据存储到数据库。
  • 异常处理:捕获IOException,并打印堆栈信息。可以考虑在这里加上日志记录或用户友好的错误信息。

3.主要解析的业务逻辑

①解析xls

1
2
3
4
5
6
7
8
9
//解析xls
    private List readXls(InputStream inputStream) throws IOException {
        HSSFWorkbook sheets = new HSSFWorkbook(inputStream);
 
        //读取第一张sheet
        HSSFSheet sheetAt = sheets.getSheetAt(0);
        List ehicleViolatsion = new ArrayList();
        //rowNum = 3 从第三行开始获取值
        for (int rowNum = 3; rowNum
  • HSSFWorkbook:用于解析.xls格式的Excel文件。通过传入InputStream创建工作簿对象。
  • 获取工作表:使用getSheetAt(0)方法获取第一个工作表。
  • 创建列表:初始化一个ArrayList用于存放解析后的数据。
  • 读取行数据:使用for循环从第三行开始读取数据(假设前两行是标题或无关信息),直到最后一行:

    • 获取行对象:通过sheetAt.getRow(rowNum)获取当前行。
    • 行非空检查:确认行对象不为空。
    • 设置单元格类型:循环设置每个单元格的类型为字符串,以避免因数据类型不同而引发的异常(例如:尝试读取数值单元格为字符串)。
  • 获取单元格值

    • 读取第2列(索引1)的值并调用setUserDept方法设置部门信息。
    • 读取第3列(索引2)的值并调用setVehicleNumber方法设置车辆编号。如果车辆编号为空,则跳过当前行,继续处理下一行。
  • 数据存储:将解析的EhicleViolation对象添加到ehicleViolations列表中。
  • 返回数据:最后返回包含所有解析数据的列表。

②解析xlsx

1
2
3
4
5
6
7
8
9
//解析xlsx
    private List readXlsx(InputStream inputStream) throws IOException {
        XSSFWorkbook sheets1 = new XSSFWorkbook(inputStream);
 
        XSSFSheet sheetAt1 = sheets1.getSheetAt(0);
 
        List ehicleViolatsion = new ArrayList();
        //rowNum = 3 从第三行开始获取值
        for (int rowNum = 3; rowNum
  • XSSFWorkbook:用于解析.xlsx格式的Excel文件。与HSSFWorkbook类似,只是处理的新格式。
  • 获取工作表:同样使用getSheetAt(0)获取第一个工作表。
  • 列表初始化:创建一个新的ArrayList用于存放解析的数据。
  • 读取行数据:与readXls方法相同的逻辑,循环遍历从第三行开始到最后一行的所有行,读取数据。
  • 设置单元格类型和获取值:使用相同的方式设置单元格类型并读取所需的列。
  • 数据存储:添加解析后的对象到列表并返回。

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

  • xls使用HSSFWorkbook 对象进行解析
  • xlsx使用XSSWorkbook 对象进行解析

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/java/14827.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部