概述
EasyExcel是一款操作Excel的Java工具,相比传统的POI,它具有更高的性能和易用性。在Spring Boot项目中集成EasyExcel,可以方便地处理大批量的Excel数据,支持读取、写入以及复杂数据结构的映射。
应用场景
- 数据导出:将数据库中的数据导出为Excel文件,例如导出用户信息、订单信息等。
- 数据导入:从Excel文件中读取数据并存入数据库,例如批量导入用户信息、产品信息等。
- 报表生成:生成复杂的Excel报表,包括统计数据、图表等。
示例代码实现
添加依赖
首先,需要在Spring Boot项目的pom.xml
文件中添加EasyExcel的依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.3.0</version> <!-- 版本号根据实际情况选择最新版本 -->
</dependency>
Excel导出示例
假设我们要导出用户信息到Excel文件。
1、创建一个DTO(数据传输对象)表示用户信息:
public class UserDTO {
private Long id;
private String username;
private String email;
// 省略getter和setter
}
2、创建导出服务类:
@Service
public class ExcelService {
public void exportUsersToExcel(HttpServletResponse response) throws IOException {
// 查询用户数据,这里假设从数据库中获取
List<UserDTO> userList = userRepository.findAll();
// 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=users.xlsx");
// 使用EasyExcel进行写操作
try (OutputStream out = response.getOutputStream()) {
EasyExcel.write(out, UserDTO.class).sheet("用户信息").doWrite(userList);
} catch (IOException e) {
// 处理异常
e.printStackTrace();
}
}
}
3、创建一个Controller来处理导出请求:
@RestController
@RequestMapping("/excel")
public class ExcelController {
@Autowired
private ExcelService excelService;
@GetMapping("/export")
public void exportUsers(HttpServletResponse response) throws IOException {
excelService.exportUsersToExcel(response);
}
}
这样,当访问/excel/export
路径时,会自动下载名为users.xlsx
的Excel文件,包含所有用户信息。
Excel导入示例
假设我们要从Excel文件中导入用户信息到数据库。
1、创建一个Excel导入的服务类:
@Service
public class ExcelService {
@Transactional
public void importUsersFromExcel(MultipartFile file) throws IOException {
List<UserDTO> userList = new ArrayList<>();
// 使用EasyExcel进行读操作
EasyExcel.read(file.getInputStream(), UserDTO.class, new AnalysisEventListener<UserDTO>() {
@Override
public void invoke(UserDTO data, AnalysisContext context) {
// 处理每一行数据,可以进行业务逻辑处理或者直接存入数据库
userList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 全部数据解析完成,可以进行批量插入数据库的操作
userRepository.saveAll(userList);
}
}).sheet().doRead();
}
}
2、创建一个Controller来处理导入请求:
@RestController
@RequestMapping("/excel")
public class ExcelController {
@Autowired
private ExcelService excelService;
@PostMapping("/import")
public ResponseEntity<String> importUsers(@RequestParam("file") MultipartFile file) {
try {
excelService.importUsersFromExcel(file);
return ResponseEntity.ok("文件导入成功");
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件导入失败");
}
}
}
通过以上示例,可以实现一个基于Spring Boot集成EasyExcel的简单的Excel导入导出功能。在实际应用中,可以根据需求对DTO进行扩展,处理复杂的Excel结构以及业务逻辑。