需求:导入巡点检项目,不同的项目类型内容不同
代码如下:
1、excelReader
2、ReadSheet
3、excelReader.read(readSheet1.....);
4、excelReader.finish();
//导入巡检项目 校验必填和类型是否存在
List<AsInspectionPatrolTextExcelImportDTO> importResultList1 = null;
List<AsInspectionPatrolSelectExcelImportDTO> importResultList2 = null;
List<AsInspectionPatrolSelectExcelImportDTO> importResultList3 = null;
List<AsInspectionPatrolNumberExcelImportDTO> importResultList4 = null;
try {
ExcelReader excelReader = EasyExcel.read(file.getInputStream()).build();
AsInspectionItemPatrolTextExcelImportListener asInspectionItemPatrolTextExcelImportListener = new AsInspectionItemPatrolTextExcelImportListener();
AsInspectionItemPatrolSelectExcelImportListener asInspectionItemPatrolSingleSelectExcelImportListener = new AsInspectionItemPatrolSelectExcelImportListener();
AsInspectionItemPatrolSelectExcelImportListener asInspectionItemPatrolMultiSelectExcelImportListener = new AsInspectionItemPatrolSelectExcelImportListener();
AsInspectionItemPatrolNumberExcelImportListener asInspectionItemPatrolNumberExcelImportListener = new AsInspectionItemPatrolNumberExcelImportListener();
ReadSheet textSheet = EasyExcel.readSheet("文本").headRowNumber(3).registerReadListener(asInspectionItemPatrolTextExcelImportListener).build();
ReadSheet singleSheet = EasyExcel.readSheet("单选").headRowNumber(3).registerReadListener(asInspectionItemPatrolSingleSelectExcelImportListener).build();
ReadSheet multiSheet = EasyExcel.readSheet("多选").headRowNumber(3).registerReadListener(asInspectionItemPatrolMultiSelectExcelImportListener).build();
ReadSheet numberSheet = EasyExcel.readSheet("数值").headRowNumber(3).registerReadListener(asInspectionItemPatrolNumberExcelImportListener).build();
excelReader.read(textSheet, singleSheet, multiSheet, numberSheet);
excelReader.finish();
importResultList1 = asInspectionItemPatrolTextExcelImportListener.getResultList();
importResultList2 = asInspectionItemPatrolSingleSelectExcelImportListener.getResultList();
importResultList3 = asInspectionItemPatrolMultiSelectExcelImportListener.getResultList();
importResultList4 = asInspectionItemPatrolNumberExcelImportListener.getResultList();
} catch (Exception e) {
e.printStackTrace();
throw new SoneException("请选择正确的导入文件");
}
if (CollectionUtils.isEmpty(importResultList1) && CollectionUtils.isEmpty(importResultList2) &&
CollectionUtils.isEmpty(importResultList3) && CollectionUtils.isEmpty(importResultList4)) {
throw new SoneException("没有数据或导入模板被篡改,无法导入");
}
监听器的invoke方法被调用时就会报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX
原因是忘记指定每一个sheet读取时候的class ,只需要在read之前加上以下代码即可
textSheet.setClazz(AsInspectionPatrolTextExcelImportDTO.class);
singleSheet.setClazz(AsInspectionPatrolSelectExcelImportDTO.class);
multiSheet.setClazz(AsInspectionPatrolSelectExcelImportDTO.class);
numberSheet.setClazz(AsInspectionPatrolNumberExcelImportDTO.class);
如果需求只是读取一个sheet,也可以试试下面这种写法:
AsMaintenanceItemExcelImportListener listener = new AsMaintenanceItemExcelImportListener();
EasyExcelFactory.read(file.getInputStream(), AsMaintenanceItemExcelImport.class, listener).sheet(0).headRowNumber(2).doRead();
监听器可以参考一下这篇文章: