返回

掌握Excel多Sheet导入,解锁SpringBoot进阶姿势!

后端

在 Spring Boot 项目中,我们经常需要处理 Excel 文件的导入和导出,比如批量导入用户信息、导出报表数据等等。虽然 Java 自带了一些处理 Excel 的 API,但使用起来比较繁琐,代码量也比较大。这时,Easypoi 就能派上用场了,它是一个基于 POI 的 Excel 工具库,可以简化 Excel 的操作,提高开发效率。

Spring Boot 集成 Easypoi 实现 Excel 导入导出

首先,我们需要在项目中引入 Easypoi 的依赖。就像盖房子需要砖块一样,引入依赖就是把 Easypoi 的功能“搬”到我们的项目里。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>6.0.4</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easypoi-excel</artifactId>
    <version>6.0.4</version>
</dependency>

接着,我们需要配置 Spring MVC 的路径匹配策略。这个步骤就像告诉 Spring Boot 如何处理请求路径,让它能正确地找到我们的代码。

spring:
  mvc:
    pathmatch:
      matching-strategy: ANT_PATH_MATCHER

现在,我们可以开始编写导入数据的代码了。想象一下,我们有一张学生信息的 Excel 表格,需要把里面的数据导入到数据库中。我们可以创建一个接口,接收上传的 Excel 文件,然后使用 Easypoi 读取文件内容,并将数据保存到数据库。

@PostMapping("/import")
public R importExcel(@RequestParam("file") MultipartFile file) {
    EasyPoiExcelUtil.importExcel(file, Student.class);
    return R.ok();
}

在上面的代码中,EasyPoiExcelUtil.importExcel() 方法会读取 Excel 文件的内容,并将其转换为 Student 对象的列表。然后,我们可以将这些对象保存到数据库中。

接下来,我们来看看如何导出数据。假设我们需要将数据库中的学生信息导出到 Excel 文件中,我们可以创建一个接口,查询数据库中的数据,然后使用 Easypoi 将数据写入 Excel 文件,并返回给用户下载。

@GetMapping("/export")
public R exportExcel() {
    List<Student> students = studentService.list();
    EasyPoiExcelUtil.exportExcel(students, "学生信息", "学生", Student.class, "学生信息.xls");
    return R.ok();
}

在上面的代码中,EasyPoiExcelUtil.exportExcel() 方法会将 students 列表中的数据写入 Excel 文件,并设置文件名、Sheet 名称等信息。

有时候,我们需要将数据导出到多个 Sheet 中,比如将不同年级的学生信息分别导出到不同的 Sheet 中。Easypoi 也支持这种操作,我们可以使用 Map 来存储每个 Sheet 的数据,然后调用 EasyPoiExcelUtil.exportExcel() 方法进行导出。

@GetMapping("/exportWithSheets")
public R exportExcelWithSheets() {
    List<Student> students = studentService.list();
    Map<String, Object> map = new HashMap<>();
    map.put("sheet1", students);
    EasyPoiExcelUtil.exportExcel(map, "学生信息", "学生", Student.class, "学生信息.xls");
    return R.ok();
}

在上面的代码中,map 的键是 Sheet 的名称,值是要导出的数据。

注意事项

在使用 Easypoi 进行 Excel 导入导出时,需要注意以下几点:

  • 导入时,Excel 表头必须与 Java 类的属性名一致,否则 Easypoi 无法将数据正确地映射到 Java 对象中。
  • 导出时,Excel 表头将使用 Java 类的属性名,如果需要自定义表头,可以使用 @Excel 注解。
  • 多 Sheet 导出时,Map 的键为 Sheet 的名称,值为要导出的数据。

常见问题及解答

1. Easypoi 支持哪些 Excel 格式?

Easypoi 支持 xls 和 xlsx 格式的 Excel 文件。

2. 如何自定义 Excel 表头?

可以使用 @Excel 注解来指定表头名称、列宽、格式等信息。

3. 如何处理导入数据中的错误?

可以使用 @ExcelVerify 注解来校验数据,并在校验失败时抛出异常。

4. 如何导出图片到 Excel 中?

可以使用 @ExcelPicture 注解来指定图片路径和位置。

5. 如何设置 Excel 单元格的格式?

可以使用 @Excel 注解的 format 属性来指定单元格的格式,例如日期格式、数字格式等。