EasyExcel工具的使用、超详细!!!

EasyExcel操作

官方文档:添加链接描述

一、导入依赖

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.2.7</version>
</dependency>

二、创建实体类

@Data
public class DemoData {
    
    
    @ExcelProperty("字符串标题")
    private String string;
    @ExcelProperty("日期标题")
    private Date date;
    @ExcelProperty("数字标题")
    private Double doubleData;

    /*忽略这个字段 它就不会生成这个字段的表格*/
    @ExcelIgnore
    private String ignore;   
}

三、写入操作

package com.yangzihao.springbooteasyexcel;
import com.alibaba.excel.EasyExcel;
import com.yangzihao.springbooteasyexcel.easy.DemoData;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/*测试类*/
@SpringBootTest
public class EasyTest {
    
    

    public static String PATH="E:\\mavenworkspace\\springboot-easyexcel\\src\\main\\resources\\"; //当前项目资源文件路径
    /*通过这个方法生成数据*/
    private List<DemoData> data() {
    
    
        List<DemoData> list = new ArrayList<DemoData>();
        for (int i = 0; i < 10; i++) {
    
    
            DemoData data = new DemoData();
            data.setString("字符串" + i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }

    /*将数据写进excel*/
    @Test
    public  void  test(){
    
    
        //文件名
        String fileName = PATH + "EasyTest.xlsx";
        //第一个参数为文件路径和文件名  第二个为根据哪个类的规则去写进   第三个参数为写出的list集合数据
        //write(文件名,实体类)   sheet("表格名") doWrite(写进表格的数据(来自数据库查询的数据或者是前端传递过来也行))
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
    }
}

四、数据读取操作

1、用来进行持久化操作的DAO

package com.yangzihao.springbooteasyexcel;
import com.yangzihao.springbooteasyexcel.easy.DemoData;
import java.util.List;
public class DemoDAO {
    
    
    public void save(List<DemoData> list) {
    
    
        // 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入
        /*进行持久化操作*/
    }
}

2、数据写入的逻辑的监听器

package com.yangzihao.springbooteasyexcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.yangzihao.springbooteasyexcel.easy.DemoData;
import lombok.extern.slf4j.Slf4j;
import org.junit.platform.commons.logging.Logger;
import org.junit.platform.commons.logging.LoggerFactory;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class DemoDataListener extends AnalysisEventListener<DemoData> {
    
    

    private static final int BATCH_COUNT = 5;
    List<DemoData> list = new ArrayList<DemoData>();  //存储读取到的数据
    private DemoDAO demoDAO;

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

    /*读取数据的时候会执行这个invoke方法*/
    //DemoData 类型
    //AnalysisContext 分词器
    @Override
    public void invoke(DemoData data, AnalysisContext context) {
    
    
        log.info("解析到一条数据:{}", JSON.toJSONString(data));
        list.add(data);
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {
    
    
            saveData();
            // 存储完成清理 list
            list.clear();
        }
    }


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

    /*调用持久化方法*/
    private void saveData() {
    
    
        log.info("{}条数据,开始存储数据库!", list.size());
        demoDAO.save(list);
        log.info("存储数据库成功!");
    }

}

3、读取方法的调用

   //读取操作
    @Test
    public void read(){
    
    
        //文件名
        String fileName = PATH + "EasyTest.xlsx";
        //这里指定用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        //读取的逻辑都在DemoDataListener 监听器的invoke方法中
        EasyExcel.read(fileName,DemoData.class,new DemoDataListener()).sheet().doRead();
    }

就是这么简单、完结撒花、、、

猜你喜欢

转载自blog.csdn.net/weixin_45647685/article/details/116010837