跳到主要内容

与 Spring 集成指南

本章节介绍如何在 Spring 框架中集成和使用 FastExcel 来处理用户上传的 Excel 文件。

概述

通过创建 RESTful API 接口,用户可以使用 HTTP 请求上传 Excel 文件,服务器端使用 FastExcel 解析数据。

环境依赖

Maven

确保在 pom.xml 文件中包括必要的依赖项:

<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>版本号</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

创建上传接口

POJO类

首先,定义一个用于映射 Excel 数据的 POJO 类:

@Getter
@Setter
@ToString
public class UploadData {
private String string;
private Date date;
private Double doubleData;
}

数据监听器

创建一个监听器来处理每一行数据:

@Slf4j
public class UploadDataListener extends AnalysisEventListener<UploadData> {
private final List<UploadData> list = new ArrayList<>();

@Override
public void invoke(UploadData data, AnalysisContext context) {
log.info("读取到一条数据: {}", JSON.toJSONString(data));
list.add(data);
}

@Override
public void doAfterAllAnalysed(AnalysisContext context) {
log.info("所有数据读取完成!");
// 在此处可以进行数据的存储操作,如保存到数据库
}
}

Spring 控制器

创建一个控制器来处理文件上传请求:

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

@PostMapping("/upload")
public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("请选择一个文件上传!");
}

try {
FastExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener())
.sheet()
.doRead();
return ResponseEntity.ok("文件上传并处理成功!");
} catch (IOException e) {
log.error("文件处理失败", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件处理失败!");
}
}
}

复杂场景

多模板解析

通过在同一个监听器中定义多个不同的模型类和处理方法,可以根据需要扩展支持多模板解析。

异常处理

为了改善用户体验并保证程序健壮性,需要在数据处理过程中加入异常处理逻辑,可以在自定义监听器中重写 onException 方法进行详细的异常处理。

实际应用

在实际场景中,解析的数据可能需要存储到数据库中。可以在 doAfterAllAnalysed 方法中实现数据库交互逻辑,确保数据的持久化。