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

EasyExcel初了解

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

EasyExcel初了解

EasyExcel初了解

官网: https://easyexcel.opensource.alibaba.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9DR8uSj-1658993899816)(C:UsersAdministratorAppDataRoamingTyporatypora-user-images1658917061315.png)]

什么是EasyExcel

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

EasyExcel的作用

简单来说就是既实现把excel的中的数据批量添加(写)到数据库中,也实现了把数据库中的数据导入(读)到excel中

EasyExcel的应用场景

我们通常可以看到很多应用程序有导出功能就是把查询到的数据导出成Excel文件,方便转发查看,同时有时候需要把Excel中的数据通过页面展示出来,就要添加到数据库,便于查询,在页面动态展示出来给用户.这就是EasyExcel这门技术的应用场景

EasyExcel的快速入门

写功能的实现

第一步: 创建一个maven项目导入依赖


    com.alibaba
    easyexcel
    2.2.0-beta2


        
            org.projectlombok
            lombok
            1.18.20
        

第二步:创建一个实体类

注意: 实体类中的属性和excel中的表头的字段类型要保持一致,并且实体类中还要包含我们要添加到数据库中的一些需要设置的属性.

@Data    //lombok依赖的应用,省略一些需要重新或者生成的方法
public class DemoData {
    @ExcelProperty("字符串标题") //表头的名称
    private String string;
    @ExcelProperty("日期标题")  
    private Date date;
    @ExcelProperty("数字标题")
    private Double doubleDate;

    @ExcelIgnore  //不包含在excel中的字段,读出数据后封装额外字段
    private String igore;   // 之后保存在数据中 
}

第三步: 创建一个测试类 , 在测试类中编写一个获得数据集合的方法,模拟从数据库中读出的数据

public class EasyDemo {
//生成存放数据的方法 这个方法中定义好表中存放的数据
private List data() {
    //建立集合存放表中的字段
    List list = new ArrayList();
    for (int i = 0; i < 10; i++) {
        DemoData data = new DemoData();
        data.setString("字符串" + i);
        data.setDate(new Date());
        data.setDoubleDate(0.56);
        list.add(data);
    }
    return list;
}
}

第四步: 在测试类中,编写写数据的代码,其实就一行代码

String  path = "E:\study\projection\easyExcel\esayexcel_demo";
 @Test
 public void writeSimple() {
     String fileName = path + "EasyTest.xlsx";
     
     EasyExcel.write(fileName,DemoData.class).sheet("模板").doWrite(data());
 }

至此,写功能就完成了.可以执行代码,进行测试.

读功能的实现

读的话涉及到监听器,这个监听器类是读功能的核心,其中invoke方法又是监听器的核心

为了防止一下看见一大堆的代码,我第一步只是实现了把excel中的数据打印在控制台.以实现逐步理解

public class DemoDataListener extends AnalysisEventListener {
        private List list = new ArrayList();
        //DemoData 使用的格式
        // AnalysisContext 解析器,解析上下文的
        @Override
        public void invoke(DemoData data, AnalysisContext context) {
            System.out.println("输出:" + JSON.toJSONString(data));
            list.add(data);
        }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
    }

然后在测试类中添加方法

@Test
public void read() {
    String fileName = path + "EasyTest.xlsx";
    // 加上继承了AnalysisEventListener类的监听器
    DemoDataListener excelListener = new DemoDataListener();
    EasyExcel.read(fileName,DemoData.class, excelListener).sheet().doRead();
}

这里已经是小小完成了把excel数据在控制台的打印了,后边就是更进一步的扩展了,有前边的小步骤,理解可能就不那么困难了


// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去

public class DemoDataListener implements ReadListener {

private static final int BATCH_COUNT = 100;

private List cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);

private DemoDAO demoDAO;

public DemoDataListener() {
    // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
    demoDAO = new DemoDAO();
}


public DemoDataListener(DemoDAO demoDAO) {
    this.demoDAO = demoDAO;
}

@Override
public void invoke(DemoData data, AnalysisContext context) {
    
  //注意这里的data就是每次解析出来的一行数据,封装在我们创建的实体类中
    cachedDataList.add(data);
    // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
    if (cachedDataList.size() >= BATCH_COUNT) {
        //使用方法把数据读到数据库中
        saveData(); //这里方法一般都写在service层中.完成数据的添加
        // 存储完成清理 list
        cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
    }
}


@Override
public void doAfterAllAnalysed(AnalysisContext context) {
    // 这里也要保存数据,确保最后遗留的数据也存储到数据库
    saveData();
    log.info("所有数据解析完成!");
}


private void saveData() {
    log.info("{}条数据,开始存储数据库!", cachedDataList.size());
    demoDAO.save(cachedDataList);
    log.info("存储数据库成功!");
}
}

更多的扩展可以去官网进一步了解: https://easyexcel.opensource.alibaba.com/

初学总结.纯粹学习用,如果有不对的希望,可以有人及时指正 .>>>Thanks♪(・ω・)ノ>>>>

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

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

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