21xrx.com
2024-12-22 22:30:52 Sunday
登录
文章检索 我的文章 写文章
JavaEasyExcel实现数据读取和校验
2023-06-16 11:46:53 深夜i     --     --
JavaEasyExcel 数据读取 数据校验 Excel文件 开源工具 扩展操作 自定义类 数据转

JavaEasyExcel是一个开源的Java实现Excel读写的工具,它支持快速读取并解析Excel文件中的数据,并且可以进行数据校验。本文将介绍如何使用JavaEasyExcel实现数据读取和校验,并且提供一些Code实例用于参考。

首先,我们需要在pom.xml文件中加入JavaEasyExcel的依赖:


   com.alibaba

   easyexcel

   2.1.6

接下来,我们来看一个简单的数据读取示例:


public class ReadDataExample {

  public static void main(String[] args) throws IOException {

    String fileName = "demo.xlsx";

    List users = readExcelWithModel(fileName, User.class);

    users.forEach(System.out::println);

  }

  public static List readExcelWithModel(String fileName, Class clazz) throws IOException {

    InputStream inputStream = new FileInputStream(fileName);

    ExcelReader reader = new ExcelReader(inputStream, null, new AnalysisEventListener () {

      private List datas = new ArrayList ();

      @Override

      public void invoke(T data, AnalysisContext context) {

        datas.add(data);

      }

      @Override

      public void doAfterAllAnalysed(AnalysisContext context)

        // do nothing

      

      public List getDatas()

        return datas;

      

      public void setDatas(List datas)

        this.datas = datas;

      

    });

    reader.read(new Sheet(1, 1, clazz));

    return ((AnalysisEventListener ) reader.getEventListener()).getDatas();

  }

}

在上述示例中,我们通过readExcelWithModel方法读取指定文件名的excel文件,并将读取到的数据转成User类型的List,最后使用foreach循环将List中的每个User数据打印在控制台上。

接着,我们来看看如何实现数据校验。在读取Excel文件时,我们可以自定义一个类实现AnalysisEventListener接口来扩展数据校验的操作:


public class UserExcelListener extends AnalysisEventListener {

  private List successList = new ArrayList ();

  private List errList = new ArrayList ();

  @Override

  public void invoke(User user, AnalysisContext analysisContext) {

    if (StringUtils.isBlank(user.getName())) {

      errList.add("姓名不能为空");

      return;

    }

    if (user.getAge() == null) {

      errList.add("年龄不能为空");

      return;

    }

    if (user.getAge() < 0 || user.getAge() > 120) {

      errList.add("年龄必须在0-120之间");

      return;

    }

    successList.add(user);

  }

  @Override

  public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    System.out.println("读取完成,成功读取数据:" + successList.size() + " 条,失败数据:" + errList.size() + " 条");

    if (!errList.isEmpty()) {

      for (String err : errList) {

        System.out.println(err);

      }

    }

  }

  public List getSuccessList()

    return successList;

  

  public List getErrList()

    return errList;

  

}

在上述示例中,我们重写了AnalysisEventListener的invoke方法,对数据进行校验。如果数据符合要求,则存储在successList中,如果数据不符合要求,则存储在errList中。最后在doAfterAllAnalysed回调函数中统计读取情况。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复