我这里演示的是excel表格从上传,解析落库,自动转换成实体类,进行一个落库操作 boot版本用的是2.2.5.RELEASE
pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
实体类的编写
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Demo{
@ExcelProperty(value = "12312")
private String name;
@ExcelProperty(value = "年龄")
private String age;
@ExcelProperty(value = "地址")
private String address;
/**
* 电话
*/
private String tel;
}
当上传的excel表格中没有这个某个字段时, @ExcelProperty 这个注解可写可不写,在落库时不会有任何的影响
@RestController
public class UploadController {
@Resource
private DemoService demoService;
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
// 对上传的文件进行处理
if (!file.isEmpty()) {
try {
EasyExcel.read(file.getInputStream(), Demo.class, new ExcelDataListener(demoService)).sheet().doRead();
return "Excel 文件解析成功!";
} catch (Exception e) {
return "Excel 文件解析失败:" + e.getMessage();
}
} else {
return "上传的文件为空!";
}
}
}
在这要把这个service 加入ExcelDataListener 里面去才能 调用service层方法, 单独在类里面注入service 会注入失败
public class ExcelDataListener extends AnalysisEventListener<Demo> {
public DemoService demoService;
public ExcelDataListener() {
}
public ExcelDataListener(DemoService demoService) {
this.demoService= demoService;
}
List<Demo> list = new ArrayList<>();
@Override
public void invoke(Demo dto, AnalysisContext context) {
list.add(dto);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据解析完成后的操作
//调用service层的方法进行落库
demoService.insertBatch(list);
}
}