EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目
首先引入maven
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
一.导出(写)
1.创建导出对象
加@ExcelIgnore 注解后将不作为导出字段 @ExcelProperty("XX")导出的表头
@Data
public class OlderVo {
@ExcelIgnore
private String id;
@ExcelProperty("地区")
private String area;
@ExcelProperty("总数")
private String total;
private String code;
}
导出,如果不自定义表头就去掉.head(dead())
public void exportOlder(HttpServletResponse response) throws IOException {
List<OlderVo> list = XXXXService.exportXXX();
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("导出", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), OlderVo.class).sheet("模板").head(head()).doWrite(list);
}
//自定义表头
private static List<List<String>> head() {
List<List<String>> list = new ArrayList<List<String>>();
List<String> head0 = new ArrayList<String>();
head0.add("地区");
List<String> head1 = new ArrayList<String>();
head1.add("总数");
List<String> head2 = new ArrayList<String>();
head2.add("60-69周岁");
head2.add("数量");
List<String> head3 = new ArrayList<String>();
head3.add("60-69周岁");
head3.add("占比");
list.add(head0);
list.add(head1);
list.add(head2);
list.add(head3);
return list;
}
二.读操作(导入获取数据)
1.创建接收的实体
@Data
public class TemplateEntity {
@ExcelProperty("标号")
private Integer label;
@ExcelProperty("字符串")
private String str;
@ExcelProperty("数字")
private Integer num;
}
2.导出接口
@PostMapping("/getinfo")
public R importExcel(@RequestPart("file") MultipartFile file) throws IOException {
R r = templateService.impExcel(file);
return r;
}
3.实现类方法
@Service
public class TemplateServiceImpl implements TemplateService {
@Override
public R impExcel(MultipartFile file) throws IOException {
List<TemplateEntity> entities = getTemplateEntities(file);
System.out.println(entities);
return R.ok(entities);
}
private List<TemplateEntity> getTemplateEntities(MultipartFile file) throws IOException {
TemplateListener templateListener = new TemplateListener();
EasyExcel.read(file.getInputStream(),TemplateEntity.class,templateListener).sheet().doRead();
return templateListener.getDate();
}
}
4.监听器
public class TemplateListener extends AnalysisEventListener<TemplateEntity> {
private List<TemplateEntity> list = new ArrayList<>();
@Override
public void invoke(TemplateEntity data, AnalysisContext analysisContext) {
list.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
public List<TemplateEntity> getDate(){
return list;
}
}