欢迎访问宙启技术站
智能推送

Springboot+Poi导入Excel表格实现过程详解

发布时间:2023-05-15 07:52:27

Poi是一款Apache组织开源的Java开发工具包,是操作Microsoft Office格式文件的基础库。Springboot是一个基于Spring框架的快速开发框架,能够使开发者更加便捷地进行开发,实现高效开发过程。本文将介绍使用Springboot Poi导入Excel表格实现的过程,以便开发者能够更好地了解如何使用该技术。

一、环境准备

首先需要在项目中添加依赖,我们使用Maven项目的方式,添加以下依赖:

<dependencies>
    <!-- Springboot Web依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Poi依赖 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.1</version>
    </dependency>
</dependencies>

二、编写Controller层

@RestController
@RequestMapping("/excel")
public class ExcelController {
    /**
     * 导入Excel文件
     */
    @PostMapping("/import")
    public String importExcel(HttpServletRequest request) {
        try {
            MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
            MultipartFile file = multipartHttpServletRequest.getFile("file");

            // 解析Excel文件
            List<ExcelVO> dataList = readExcel(file);

            // 保存数据到数据库
            saveData(dataList);

            return "success";
        } catch (Exception ex) {
            return "error";
        }
    }

    /**
     * 解析Excel文件
     */
    private List<ExcelVO> readExcel(MultipartFile file) throws Exception {
        Workbook workbook = WorkbookFactory.create(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);

        List<ExcelVO> dataList = new ArrayList<>();
        for (int i = 1; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            if (row == null) {
                continue;
            }

            ExcelVO data = new ExcelVO();
            data.setName(getValue(row.getCell(0)));
            data.setAge(getValue(row.getCell(1)));
            data.setSex(getValue(row.getCell(2)));

            dataList.add(data);
        }

        return dataList;
    }

    /**
     * 获取单元格内容(不同类型的单元格需要不同的处理方式)
     */
    private String getValue(Cell cell) {
        if (cell == null) {
            return null;
        }

        if (cell.getCellTypeEnum() == CellType.STRING) {
            return cell.getStringCellValue();
        }

        if (cell.getCellTypeEnum() == CellType.NUMERIC) {
            return String.valueOf((int) cell.getNumericCellValue());
        }

        return null;
    }

    /**
     * 数据保存到数据库
     */
    private void saveData(List<ExcelVO> dataList) {
        // ...
    }
}

在该代码段中,我们编写了一个导入Excel文件的Controller,该Controller中定义了一个@PostMapping属于该Controller的方法,具体实现的功能就是读取上传的Excel文件,解析并将数据保存至数据库。

三、编写实体类

public class ExcelVO {
    private String name;    // 姓名
    private String age;     // 年龄
    private String sex;     // 性别

    // getter和setter方法
}

在该代码段中,我们定义了一个ExcelVO实体类,该实体类的属性与导入Excel表格中的数据列相对应,方便我们将数据保存至数据库。

四、编写前端页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Excel导入</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data" action="/excel/import">
        <input type="file" name="file" />
        <input type="submit" value="导入" />
    </form>
</body>
</html>

在该代码段中,我们编写了一个简单的HTML页面,定义了一个上传文件的表单,方便用户上传Excel文件并提交导入请求。

五、运行效果

运行项目后,在浏览器中访问form表单页面,并选择一个Excel文件上传:

![](https://cdn.luogu.com.cn/upload/image_hosting/cbiwmr22.png)

上传成功后,页面显示“success”表示导入成功:

![](https://cdn.luogu.com.cn/upload/image_hosting/8zwacnmu.png)

至此,我们成功地完成了Springboot Poi导入Excel表格的实现过程。在实现过程中,我们使用了Springboot、Poi等技术,实现了将Excel表格数据批量导入数据库的功能,使开发者能够便捷地进行开发工作。