栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JAVA】easyexcel 一个表头对应多个名称解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JAVA】easyexcel 一个表头对应多个名称解析

pom 依赖

    
            com.alibaba
            easyexcel
            2.2.8
        

编写实体解析对应的实体类,如下,一个字段对应多个列名称,easyexcel目前未实现一列多名称的解析,此文档适用于导入模板列名调整,同时兼容之前的版本

package eample.model;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;


@Data
@ExcelIgnoreUnannotated
public class ExpectionWhiteListUserimportVO {

    
    @ExcelProperty(value = {"姓名","名字"})
    private String name;

    
    @ExcelProperty(value = {"国际代码1","区号"})
    private String areaCode;

    
    @ExcelProperty(value = {"手机号","电话号码"})
    private String phone;


}

编写解析类

package com.ev.easyexcel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelAnalysisException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class CustomizeListener extends AnalysisEventListener> {

    private static final int BATCH_COUNT = 2000;
    private Map fieldValue = new HashMap<>();
    public List list = new ArrayList<>();
    public Class classType;

    public CustomizeListener(Class classType) {
        this.classType = classType;
    }

    public CustomizeListener() {
    }

    
    @Override
    public void invokeHeadMap(Map headMap, AnalysisContext context) {
        fieldValue.putAll(EasyExcelParsing.fieldValueSet(headMap, classType));
        super.invokeHeadMap(headMap, context);
    }

    
    @Override
    public void invoke(Map data, AnalysisContext analysisContext) {
        if (fieldValue.isEmpty()) {
            throw new ExcelAnalysisException("模板错误");
        }

        Object obj = null;
        try {
            obj = classType.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        EasyExcelParsing.setFieldValue(data, fieldValue, obj);
        list.add(obj);
        if (list.size() >= BATCH_COUNT) {
            dataDeal();
            list.clear();
        }

    }

    public void dataDeal() {

    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        dataDeal();
    }

}
 

列值对应

package com.ev.easyexcel;

import com.alibaba.excel.annotation.ExcelProperty;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


public class EasyExcelParsing {

    
    public static void setFieldValue(Map valueMap, Map fieldValue, Object obj) {
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            //遍历每个属性
            if (field.isAnnotationPresent(ExcelProperty.class) && fieldValue.containsKey(field.getName())) {
                field.setAccessible(true);
                try {
                    field.set(obj, valueMap.get(fieldValue.get(field.getName())));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    
    public static Map fieldValueSet(Map headMap, Class cla) {
        Map fieldValue = new HashMap<>();
        Field[] fields = cla.getDeclaredFields();
        for (Field field : fields) {
            //遍历每个属性
            if (field.isAnnotationPresent(ExcelProperty.class)) {
                ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
                for (Map.Entry entry : headMap.entrySet()) {
                    if (Arrays.asList(excelProperty.value()).contains(entry.getValue())) {
                        fieldValue.put(field.getName(), entry.getKey());
                    }
                }
            }
        }
        return fieldValue;
    }
}

编写自己的处理类

package eample.model;

import com.ev.easyexcel.CustomizeListener;


public class MyListener extends CustomizeListener {

    public MyListener(Class classType) {
        super(classType);
    }

    @Override
    public void dataDeal() {
         list.forEach(item->{
             ExpectionWhiteListUserimportVO expectionVO= (ExpectionWhiteListUserimportVO) item;
             System.out.println(expectionVO.getName());
             System.out.println(expectionVO.getAreaCode());
             System.out.println(expectionVO.getPhone());
          });
     }
}

启动代码

EasyExcelFactory.read("C:\Users\Administrator\Desktop\模板.xlsx", new MyListener(ExpectionWhiteListUserimportVO.class)).headRowNumber(1).sheet().doRead();

就可以正常解析了

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号