Spring Boot整合 EasyExcel 实现复杂 Excel 表格的导入与导出功能

绿茶味的清风 2024-03-02 ⋅ 122 阅读

引言

在日常开发中,我们经常需要处理与 Excel 相关的操作,包括导入和导出 Excel 表格。传统的 Excel 处理方式通常使用 POI 这类库,但是它们对于复杂的 Excel 表格处理起来比较繁琐。而 EasyExcel 是一个基于注解的简单易用的 Excel 处理框架,可以轻松地实现复杂 Excel 表格的导入和导出功能。

本文将介绍如何使用 Spring Boot 整合 EasyExcel 实现复杂 Excel 表格的导入与导出功能,并演示一些实际应用场景。

学前准备

在开始之前,我们需要完成以下准备工作:

  • 一台已经安装好 IDEA 的电脑
  • JDK 1.8+
  • Maven 3.0+
  • Spring Boot 2.4.0+
  • EasyExcel 2.3.0+

导入 Excel 表格

首先,我们需要创建一个 Spring Boot 项目,并添加 EasyExcel 依赖。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.3.0</version>
</dependency>

接下来,我们创建一个 Controller 类,用于处理导入 Excel 表格的请求。

@RestController
@RequestMapping("/excel")
public class ExcelController {

    @PostMapping("/import")
    public String importExcel(@RequestParam("file") MultipartFile file) throws IOException {
        InputStream inputStream = file.getInputStream();
        try {
            ExcelReader excelReader = EasyExcel.read(inputStream, User.class, new UserListener()).build();
            excelReader.readAll();
        } finally {
            inputStream.close();
        }
        
        return "导入成功";
    }
}

在上述代码中,我们首先获取到上传的 Excel 文件的输入流,然后使用 EasyExcel 的 ExcelReader 类来读取 Excel 文件。User 类是我们定义的实体类,用于与 Excel 表格中的数据进行映射。UserListener 是一个自定义的监听器类,用于在读取 Excel 数据的过程中执行一些操作。我们可以在监听器类中实现一些自定义的逻辑,例如数据校验、数据处理等。

public class UserListener extends AnalysisEventListener<User> {

    private List<User> userList = new ArrayList<>();

    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
        userList.add(user);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 对读取到的数据进行处理逻辑
    }

    public List<User> getUserList() {
        return userList;
    }
}

UserListener 类实现了 AnalysisEventListener 接口,并重写了其中的两个方法。invoke 方法会在读取到每一行数据时被调用,我们可以在该方法内将读取到的数据保存起来。doAfterAllAnalysed 方法会在全部数据读取完成后被调用,我们可以在该方法内对读取到的数据进行一些处理逻辑。

完成以上代码后,我们就可以使用 Postman 或者其他方式来测试我们的导入功能了。

导出 Excel 表格

除了导入 Excel 表格,EasyExcel 也提供了导出 Excel 表格的功能。我们可以将数据库中的数据导出到 Excel 表格中,或者直接导出一些模板。

@RestController
@RequestMapping("/excel")
public class ExcelController {

    @Autowired
    private UserService userService;

    @GetMapping("/export")
    public void exportExcel(HttpServletResponse response) throws IOException {
        List<User> userList = userService.getAllUsers();
 
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
  
        String fileName = "users.xlsx";
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        
        try (OutputStream out = response.getOutputStream()) {
            ExcelWriter excelWriter = EasyExcel.write(out, User.class).build();
            WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build();
            excelWriter.write(userList, writeSheet);
            excelWriter.finish();
        }
    }
}

在上述代码中,我们首先获取到数据库中的用户数据,然后使用 EasyExcel 的 ExcelWriter 类将数据写入到 Excel 文件中。User.class 是我们定义的实体类,用于与 Excel 表格中的数据进行映射。writeSheet 对象表示要写入的 sheet 名称。最后,我们通过 response 对象将 Excel 文件以附件的形式返回给客户端。

完成以上代码后,我们就可以使用浏览器访问 /excel/export 接口,直接下载 Excel 文件了。

结语

本文介绍了如何使用 Spring Boot 整合 EasyExcel 实现复杂 Excel 表格的导入与导出功能。EasyExcel 提供了简洁易用的 API,能够轻松应对各种复杂的 Excel 表格处理需求。希望本文对你理解 EasyExcel 的使用有所帮助。


全部评论: 0

    我有话说: