场景,每个 sheet 中的内容不一样,对读取之后的数据需要处理,而且需要对接数据库持久化,同一个ExcelListener 怎么操作?
[alibaba/easyexcel]多个 sheet 的读取只支持测试用例中那样的逐行读取吗
回答
测试用例中对后一个sheet处理ExcelListener中的 data 数据会包含前几个 sheet 中的数据,是不是有问题?
public static Map<String,List<Object>> readSheets(InputStream inputStream){ Map<String,List<Object>> data = new LinkedHashMap<>(); try{ ExcelListener excelListener = new ExcelListener(); ExcelReader excelReader = EasyExcelFactory.getReader(inputStream, excelListener); List<Sheet> sheets = excelReader.getSheets(); if (CollectionUtils.isEmpty(sheets)){ return data; } for (Sheet sheet:sheets){ String sheetName = sheet.getSheetName(); excelReader.read(sheet); List<Object> sheetData = excelListener.getData(); data.put(sheetName,new ArrayList<>(sheetData)); excelListener.getData().clear(); } }catch (Exception e){ log.error("readSheets error:",e); }finally { if (null!=inputStream){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return data; }
ExcelListener里声明一个list,每读一行添加到list。 循环里面读完一个sheet,clear一次。 map里别直接put ExcelListener的list,不然清除后map里的list全是空的。 data.put(sheetName,new ArrayList<>(sheetData)); excelListener.getData().clear();
建议 请使用最新版本。https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel 。 并且参照:https://github.com/alibaba/easyexcel/blob/master/quickstart.md 去书写。然后为每个sheet
注册不同的监听器