EasyExcel工具类

可以读取不同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");
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值