可以读取不同sheet下的数据,并能根据sheet次序获取表格对应的的数据集合
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class EasyExcelListenerPro extends AnalysisEventListener<Object> {
private Map<Integer, List<Object>> sheetDataMap = new HashMap<>();
private Map<Integer, Class<?>> sheetClassMap = new HashMap<>();
public EasyExcelListenerPro() {
}
public void addSheetClass(int sheetNo, Class<?> clazz) {
sheetClassMap.put(sheetNo, clazz);
}
@Override
public void invoke(Object data, AnalysisContext analysisContext) {
int sheetIndex = analysisContext.readSheetHolder().getSheetNo();
sheetDataMap.computeIfAbsent(sheetIndex, k -> new ArrayList<>()).add(data);
log.debug("解析到一条数据, sheetNo:{} data:{}", sheetIndex, JSON.toJSONString(data));
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.debug("所有数据,已经解析完毕");
}
public <T> List<T> getSheetData(int sheetNo, Class<T> clazz) {
List<Object> rawData = sheetDataMap.getOrDefault(sheetNo, new ArrayList<>());
List<T> result = new ArrayList<>();
for (Object obj : rawData) {
if (clazz.isInstance(obj)) {
result.add(clazz.cast(obj));
}
}
return result;
}
public Map<Integer, List<Object>> getAllSheetData() {
return sheetDataMap;
}
}
使用方法
public static void main(String[] args) {
String fileName = "C:\\Users\\27413\\Desktop\\导入模板.xlsx";
// 创建监听器实例
EasyExcelListenerPro listener = new EasyExcelListenerPro();
// 为每个 sheet 添加对应的实体类
listener.addSheetClass(0, YsdzwYxXxb.class);
listener.addSheetClass(1, YsdzwYxJlb1.class);
listener.addSheetClass(2, YsdzwYxJlb2.class);
// 读取 sheet0
ReadSheet readSheet0 = EasyExcel.readSheet(0).head(YsdzwYxXxb.class).registerReadListener(listener).build();
// 读取 sheet1
ReadSheet readSheet1 = EasyExcel.readSheet(1).head(YsdzwYxJlb1.class).registerReadListener(listener).build();
// 读取 sheet2
ReadSheet readSheet2 = EasyExcel.readSheet(2).head(YsdzwYxJlb2.class).registerReadListener(listener).build();
// 读取 Excel 文件
EasyExcel.read(new File(fileName)).build().read(readSheet0, readSheet1, readSheet2);
// 获取各个 sheet 的数据
List<YsdzwYxXxb> dataSheet0 = listener.getSheetData(0, YsdzwYxXxb.class);
List<YsdzwYxJlb1> dataSheet1 = listener.getSheetData(1, YsdzwYxJlb1.class);
List<YsdzwYxJlb2> dataSheet2 = listener.getSheetData(2, YsdzwYxJlb2.class);
System.out.println("hello ,world");
}