1、导入依赖
<!-- easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
<!-- easyexcel -->
2、导出对象
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
public class Student{
@ExcelProperty("编号")
@ColumnWidth(20)
private Integer code;
@ExcelProperty("名称")
@ColumnWidth(20)
private String name;
@ExcelProperty("详情")
@ColumnWidth(20)
private String desc;
@ExcelProperty("备注")
@ColumnWidth(20)
private String remark;
}
3、导出
@PostMapping(value = "/export")
public void export(HttpServletResponse response) {
try {
// 获取导出集合 略
List<Student> list = getList();
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("导出结果", "UTF-8").replace("\\+", "%20");
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename" + fileName + ".xlsx");
EasyExcelFactory.write(response.getOutputStream())
.head(ForeignCardExportVO.class)
.excelType(ExcelTypeEnum.XLSX)
.sheet("第一页")
.doWrite(list);
} catch (Exception e) {
log.error("export error",e);
}
}
4、导入
@GetMapping(value = "/importData")
public void importData(@RequestParam MultipartFile fileName) throws IOException {
// 这里默认每次会读取20条数据 然后返回过来 直接调用使用数据就行
// 具体需要返回多少行可以在`PageReadListener`的构造函数设置
AtomicInteger finalCount = new AtomicInteger(0);
EasyExcelFactory.read(fileName.getInputStream(), Student.class, new PageReadListener<Student>(list -> {
log.info("解析到一条数据:{}", list.size());
for (Student demoData : list) {
if (finalCount.get() >= 30) {
log.info("count > 30,{}",demoData.toString());
continue;
}
log.info(demoData.toString());
finalCount.getAndIncrement();
}
}, 20)).sheet().doRead();
}