使用EasyExcel校验表头各字段的类型

    public static class ExcelListener<T> extends AnalysisEventListener<T> {
        private int rowCount = 0;

        private List<String> headers;

        private List<Class<?>> types;

        public void setRules(List<String> headers,List<Class<?>> types){
            this.headers=headers;
            this.types=types;
        }

        @Override
        public void invoke(T rowData, AnalysisContext context) {
            Map<Integer,Object> row= (Map<Integer, Object>) rowData;
            for(int i=0;i<row.size();i++){
                Object value=row.get(i);
                Class<?> type=types.get(i);
                String header=headers.get(i);
                if(value==null){
                    throw new RuntimeException("解析错误:第 "+(context.readSheetHolder().getRowIndex()+1)+" 行,"+header+" 不能为空");
                }else if (type==Integer.class){
                    if(!isIntNumeric(String.valueOf(value))) {
                        throw new RuntimeException("解析错误:第 " + (context.readSheetHolder().getRowIndex() + 1) + " 行," + header + " 数据类型错误");
                    }
                }
            }
            rowCount++;
        }


        private boolean isIntNumeric(String value) {
            try {
                Integer.parseInt(value);
                return true;
            } catch (NumberFormatException e) {
                return false;
            }
        }
        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {

        }

        public int getRowCount() {
            return rowCount;
        }
    }

使用:

public static int readExcelCnt(File file,List<String> headers,List<Class<?>> types){
        ExcelListener listener = new ExcelListener();
        try {
            listener.setRules(headers,types);
            EasyExcel.read(file, listener).sheet().doRead();
        } catch (Exception e) {
            throw new RuntimeException("解析Excel异常:"+e.getMessage());
        }
        int rowCount = listener.getRowCount();
        return rowCount;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值