java--->其他读取excel表格的方式,适用于读取多数据表格

实际项目中遇到的,不常用,特此记录。
对于大多数Excel数据读取,都是逐行读取。但这次发现可以直接读流。。
🙌🙌🙌🙌🙌🙌开始🙌🙌🙌🙌🙌🙌🙌🙌

//读取excel数据,注意里面的UserListener类
EasyExcel.read(excel.getInputStream(),User.class,new UserListener())
	.headRowNumber(2)
	.sheet().doRead();
class UserListener extends AnalysisEventListener<User>{
    private UserDao userDao;
    public UserListener(UserDao userDao){//在这里进行注入,因为这个类无法使用组件注解,导致只能读取bean手动注入。
        userDao=SpringUtils.getBean("userDao");
    }
    int x=0;
    @Override
    public void invoke(Map<Integer,String> headMap, AnalysisContext analysisContext) {
        //在这里可检验读取的数据是不是想要的excel
        if(x==1&&!headMap.get(0).equals("模板excel")){
            throw new RuntimeException("模板Excel不对,请检查!");
        }
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        //处理了每行数据
        userDao.insert(User);//每行数据封装成User对象
        System.out.println("读取完成");
    }
}

invoke 方法是继承自 AnalysisEventListener 接口的一个关键方法。它的主要作用是在读取 Excel 文件时,对每一行数据进行处理。

由于上面类无法实例化成bean,只能手动注入需要的Bean,以下是封装的根据名字获取bean的方法。所以上面UserListener中用的SpringUtils.getBean(“userDao”)进行注入的bean:

class SpringUtils implements ApplicationContextAware{
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringUtils.applicationContext = applicationContext;
    }
    public static <T> T getBean(String beanName) {
        if(applicationContext.containsBean(beanName)){
            return (T) applicationContext.getBean(beanName);
        }else {
            return null;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值