单个导入
实体:
@Data
public class TestExcel
/**
* 收件人名称
*/
@ExcelProperty(value = "收件人姓名(必填)")
private String receiver;
/**
* 收件人手机号
*/
@ExcelProperty(value = "收件人电话(必填)")
private String phone;
/**
* 省份名称
*/
@ExcelProperty(value = "省(必填)")
private String proviceName;
/**
* 城市名称
*/
@ExcelProperty(value = "市(必填)")
private String cityName;
/**
* 区域名称
*/
@ExcelProperty(value = "区(必填)")
private String countryName;
}
controller:
@PostMapping("/testExcel22")
public Payload testExcel(FormData formData) {
try {
EasyExcel.read(formData.getFile().getInputStream(), TestExcel.class,new ExcelTestListener()).sheet().doRead();
} catch (Exception e) {
e.printStackTrace();
throw new ApplicationException("excel解析失败");
}
return new Payload();
}
controller需要取数据:
@PostMapping("/testExcel22")
public Payload testExcel(FormData formData) {
try {
ExcelTestListener excelTestListener = new ExcelTestListener();
EasyExcel.read(formData.getFile().getInputStream(), TestExcel.class, excelTestListener ).sheet().doRead();
//获取解析数据
List<TestExcel> list = excelTestListener.getData();
} catch (Exception e) {
e.printStackTrace();
throw new ApplicationException("excel解析失败");
}
return new Payload();
}
事件监听器:
public class ExcelTestListener extends AnalysisEventListener<TestExcel> {
private List<TestExcel> list = new ArrayList<>();
@Override
public void invoke(TestExcel testExcel , AnalysisContext analysisContext) {
list.add(testExcel);
System.out.println("list======"+JSON.toJSONString(list));
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
public List<TestExcel> getData() {
return list;
}
}
多个
实体与监听器写法一致,controller:
@PostMapping("/testExcel22")
public Payload testExcel(FormData formData) {
try {
ExcelReader excelReader = EasyExcel.read(formData.getFile().getInputStream()).build();
ExcelImportTestOneListener oneListener = new ExcelImportTestOneListener();
ExcelImportTestTwoListener twoListener = new ExcelImportTestTwoListener();
ReadSheet sheet1 = EasyExcel.readSheet(0).head(TestExcelOne.class).registerReadListener(oneListener).build();
ReadSheet sheet2 = EasyExcel.readSheet(1).head(TestExcelTwo.class).registerReadListener(twoListener).build();
excelReader.read(sheet1,sheet2);
excelReader.finish();
//解析数据
List<TestExcelOne> oneList = oneListener.getData();
List<TestExcelTwo> twoList = twoListener.getData();
if(null != oneList && oneList size() > 2000){
throw new ApplicationException("导入失败,数量需小于2000条");
}
} catch (Exception e) {
e.printStackTrace();
throw new ApplicationException("excel解析失败");
}
return new Payload();
}
FormData实体
@Data
public class FormData {
@JSONField(serialize = false)
private MultipartFile file;
private String name;
private String filename;
}