• EasyExcel的写入和读取操作


    一、EasyExcel简介

    1.应用场景

    1.、数据导入:减轻录入工作量
    2、数据导出:统计信息归档
    3、数据传输:异构系统之间数据传输

    2.特点

    • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
    • EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
    • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理
      AnalysisEventListener

    二、写操作

    1.引入依赖

    <dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    	<dependency>
    		<groupId>com.alibaba</groupId>
    		<artifactId>easyexcel</artifactId>
    		<version>2.1.1</version>
    	</dependency>
    </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 创建实体类,和excel表头对应

    import com.alibaba.excel.EasyExcel;
    import com.alibaba.excel.annotation.ExcelProperty;
    import lombok.Data;
    
    @Data
    public class DemoData {
        @ExcelProperty("学生编号")
        private int sno;
        @ExcelProperty("学生姓名")
        private String sname;   
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.写入

    • fileName:设置写入文件夹地址和excel名称
    • EasyExcel.write(fileName,ExcelEntity.class).sheet(“sheetName”).doWrite(list 写入的具体数据)
     public static void main(String[] args) {
            String fileName = "xxx.xlsx";
            EasyExcel.write(fileName,DemoData.class).sheet("sheetName").doWrite(data());
        }
    
    //循环设置要添加的数据,最终封装到list集合中
        private static List<DemoData> data(){
            ArrayList<DemoData> list = new ArrayList<>();
            for (int i= 0;i<20;i++) {
                DemoData data = new DemoData();
                data.setSno(i);
                data.setSname("法外狂徒"+i);
                list.add(data);
            }
            return list;
        }
    
       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    三、读操作

    1.引入依赖

    2.创建实体类,和excel列对应

    import com.alibaba.excel.annotation.ExcelProperty;
    import lombok.Data;
    
    @Data
    public class ReadData {
        @ExcelProperty(index = 0)
        private int sid;
        @ExcelProperty(index = 1)
        private String sname;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.创建读取操作的监听器

    //创建读取excel监听器
    public class ExcelListener extends AnalysisEventListener<ReadData> {
    	
    	//创建list集合封装最终的数据
    	List<ReadData> list = new ArrayList<ReadData>();
    	
    	//一行一行去读取excle内容
    	@Override
    	public void invoke(ReadData user, AnalysisContext analysisContext) {
    		System.out.println("***"+user);
    		list.add(user);
    	 }
    
    	//读取excel表头信息
    	@Override
    	public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext
    context) {
    		System.out.println("表头信息:"+headMap);
     }
    	//读取完成后执行
    	@Override
    	public void doAfterAllAnalysed(AnalysisContext analysisContext) {
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4.读出

    • FileName
    • EasyExcel.read(fileName,ExcelEntity.class,New ExcelListener().sheet().doRead());
    public static void main(String[] args) throws Exception {
    
    //写法1:
    
    	String fileName = "F:\\01.xlsx";
    	//这里需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
    	EasyExcel.read(fileName, ReadData.class, new
    	ExcelListener()).sheet().doRead();
    
    
    
    // 写法2:
    
    	InputStream in = new BufferedInputStream(new
    	FileInputStream("F:\\01.xlsx"));
    	ExcelReader excelReader = EasyExcel.read(in, ReadData.class, new
    ExcelListener()).build();
    	ReadSheet readSheet = EasyExcel.readSheet(0).build();
    excelReader.read(readSheet);
    // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
    	excelReader.finish();
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    华为OD机试 - BOSS的收入 - 回溯(Java 2023 B卷 100分)
    SpringBoot自动装配详解_回顾一下2
    Active Directory密码恢复:徒劳的行为
    【汇编语言-王爽】第二章:寄存器
    Pytorch——实现Tensor矩阵的任意角度旋转、平移操作
    Mock测试
    移动文件路径却不破坏org file link的方法
    Flink sql 实现 -connection-clickhouse的 source和 sink
    PLSQL调整SQL字体大小
    python中使用sqlalchemy操作数据库遇到密码包含@的处理方法
  • 原文地址:https://blog.csdn.net/niki_yeun/article/details/127713098