Springboot + Easyexcel 读取数据
简单读取excel文件
读取下图的 excel 数据
导入依赖,阿里的easyexcel插件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
创建一个用来 读取 excel的实体类
实体类的属性可以用
@ExcelProperty(index = 0),index=0,找的是上图 A列(第一列)
@ExcelProperty(value = “标号”)
两种都可以用,但是不要两个一起用
实体类:
public class TemplateEntity {
@ExcelProperty("标号")
private Integer label;
@ExcelProperty("字符串")
private String str;
@ExcelProperty("数字")
private Integer num;
//getter/setter 省略
}
定义一个 监听类:
public class TemplateListener extends AnalysisEventListener<TemplateEntity> {
private List<TemplateEntity> list = new ArrayList<>();
// 一条一条读取数据,全部添加到list集合里
@Override
public void invoke(TemplateEntity data, AnalysisContext analysisContext) {
list.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
public List<TemplateEntity> getData() {
return list;
}
}
service:
public interface TemplateService {
/**
* 导入excel
*/
Result importExcel(MultipartFile file) throws IOException;
}
@Service
public class TemplateServiceImpl implements TemplateService {
@Override
public Result importExcel(MultipartFile file) throws IOException{
List<TemplateEntity> entities = getTemplateEntities(file);
// 处理数据
System.out.println(entities);
return Result.success(entities);
}
// 读取 excel 数据
private List<TemplateEntity> getTemplateEntities(MultipartFile file) throws IOException {
TemplateListener listener = new TemplateListener(); // 定义的 listener
EasyExcel.read(file.getInputStream(), TemplateEntity.class, listener).sheet().doRead();
// 返回 所有数据
return listener.getData();
}
}
Controller 上传文件接口
@RestController
@RequestMapping("/sys")
public class TemplateController {
@Autowired
private TemplateService templateService;
@RequestMapping("/import")
public Result importData(@RequestPart("file") MultipartFile file) throws IOException{
return templateService.importExcel(file);
}
}
Postman测试
{
"code": 200,
"msg": "处理成功",
"data": [
{
"label": 1,
"str": "a",
"num": 20
},
{
"label": 2,
"str": "b",
"num": 30
},
{
"label": 3,
"str": "c",
"num": 40
},
...
}
日期格式
excel文件
实体类中可以使用@DateFormat(阿里包下的)注解:
要使用String类型来接收数据才有用
public class TemplateEntity {
@ExcelProperty("标号")
private Integer label;
@ExcelProperty("字符串")
private String str;
@ExcelProperty("数字")
private Integer num;
@ExcelProperty("时间")
// 这里需要用string接收才会格式化
@DateTimeFormat("yyyy-MM-dd")
private String date;
// getter/setter省略
}
多sheet
两sheet表头数据不一致
这里为了演示效果,sheet1和sheet3是不同表头的,sheet2目前是空的数据表