在实际的开发中,我们经常需要进行Excel文件的导入和导出操作。而EasyExcel是一个简单易用、高效快速的Java处理Excel文件的开源框架。本文将介绍如何使用Spring Boot集成EasyExcel来实现Excel文件的导入和导出功能。
1. 引入依赖
首先,在你的Spring Boot项目中引入EasyExcel的相关依赖。你可以在Maven或Gradle配置文件中添加以下依赖项:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>最新版本号</version>
</dependency>
2. 实现导出功能
2.1 创建Excel模板
首先,我们需要创建一个Excel模板,定义Excel文件的结构和数据格式。可以使用Java对象作为模板,通过注解来定义每列的字段和样式。
@Data
public class User {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
// 其他属性...
}
2.2 编写导出接口
接下来,我们需要编写一个接口来实现导出功能。可以使用EasyExcel.write()
方法创建一个ExcelWriter
对象,并通过sheet()
方法创建一个工作表。然后,使用write()
方法将数据写入工作表,并使用finish()
方法完成文件写入。
@RestController
public class ExportController {
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
List<User> userList = getUserList(); // 获取要导出的数据
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("用户列表.xlsx", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), User.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
excelWriter.write(userList, writeSheet);
excelWriter.finish();
}
private List<User> getUserList() {
// 从数据库或其他数据源获取要导出的数据
// 示例代码,实际情况根据需求进行修改
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 20));
userList.add(new User("李四", 25));
return userList;
}
}
在上述示例中,我们通过EasyExcel.write()
方法创建了一个ExcelWriter
对象,并使用write()
方法将数据写入工作表。然后,通过response
将生成的Excel文件返回给前端。
3. 实现导入功能
3.1 编写导入接口
接下来,我们需要编写一个接口来实现导入功能。可以使用EasyExcel.read()
方法创建一个ExcelReader
对象,并通过sheet()
方法指定读取的工作表。然后,使用read()
方法读取数据,并通过doRead()
方法对每条数据进行处理。
@RestController
public class ImportController {
@PostMapping("/import")
public void importData(@RequestParam("file") MultipartFile file) throws IOException {
ExcelReader excelReader = EasyExcel.read(file.getInputStream(), User.class,
new UserDataListener()).build();
ReadSheet readSheet = EasyExcel.readSheet(0).build();
excelReader.read(readSheet);
excelReader.finish();
}
private static class UserDataListener extends AnalysisEventListener<User> {
private List<User> userList = new ArrayList<>();
@Override
public void invoke(User user, AnalysisContext context) {
// 处理每条数据的逻辑
// 示例代码,实际情况根据需求进行修改
userList.add(user);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据处理完毕后的逻辑
// 示例代码,实际情况根据需求进行修改
saveUserList(userList);
}
private void saveUserList(List<User> userList) {
// 将导入的数据保存到数据库或其他数据源
// 示例代码,实际情况根据需求进行修改
userList.forEach(user -> System.out.println("导入用户:" + user));
}
}
}