[alibaba/easyexcel]多个 sheet 的读取只支持测试用例中那样的逐行读取吗

2024-06-20 791 views
3

场景,每个 sheet 中的内容不一样,对读取之后的数据需要处理,而且需要对接数据库持久化,同一个ExcelListener 怎么操作?

回答

1

测试用例中对后一个sheet处理ExcelListener中的 data 数据会包含前几个 sheet 中的数据,是不是有问题?

9

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; }

8

ExcelListener里声明一个list,每读一行添加到list。 循环里面读完一个sheet,clear一次。 map里别直接put ExcelListener的list,不然清除后map里的list全是空的。 data.put(sheetName,new ArrayList<>(sheetData)); excelListener.getData().clear();