赞
踩
读取下图的 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省略 }
这里为了演示效果,sheet1和sheet3是不同表头的,sheet2目前是空的数据表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。