easyExcel导入的时候处理空格行

在导入的监听器中进行处理

通过反射得到对应的属性以及属性值,然后判断这些值是否为空,只要有一个不为空就判断这行数据不是空行,可以读取到集合中,但是当全为空时就不把这行数据加入集合。

@self
public class ExcelDataListener<T> extends AnalysisEventListener<T> {
    public Map<Integer,ExcelImportSheetData<T>> sheetMap = Maps.newLinkedHashMap();

    public Map<Integer,ExcelImportSheetData<T>> getDataList() {
        return sheetMap;
    }

    @SneakyThrows
    @Override
    public void invoke(T data, AnalysisContext context) {

        boolean exist = false;
        String[] fieldName = getFieldName(data);
        for(String string : fieldName){
            Object fieldValue = getFieldValue(data, string);
            if(fieldValue instanceof String){
                if(StringUtils.isNotBlank((String)fieldValue)){
                    exist = true;
                }
            }
            if(!Objects.isNull(fieldValue)){
                exist = true;
            }
        }
        if(!exist){
            log.warn("该行被忽略,object={}", data);
            return;
        }
        excelImportSheetDateFresh.addRowBean(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }

    /**
     * 获取属性名数组
     * */
    public static String[] getFieldName(Object o){
        Field[] fields=o.getClass().getDeclaredFields();
        String[] fieldNames=new String[fields.length];
        for(int i=0; i<fields.length; i++){
            if(fields[i].isAnnotationPresent(ExcelProperty.class)){
                fieldNames[i]=fields[i].getName();
            }
        }
        return fieldNames;
    }

    /**
     * 通过属性名获取属性值  忽略大小写
     * @param o
     * @param name
     * @return
     * @throws Exception
     */

    public static Object getFieldValue(Object o,String name){
        try {
            Field[] fields = o.getClass().getDeclaredFields();
            Object object = null;
            for (Field field : fields) {
                // 可以获取到私有属性
                field.setAccessible(true);
                if (field.getName().toUpperCase().equals(name.toUpperCase())) {
                    object = field.get(o);
                    break;
                }
            }
            return object;
        }catch (Exception e) {
            log.warn("获取值异常,field={}", o, e);
            return false;
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值