使用 EasyExcel 读取Excel(两种方式)
Posted oukele
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 EasyExcel 读取Excel(两种方式)相关的知识,希望对你有一定的参考价值。
引入 jar 包
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.2-beta5</version> </dependency>
EasyExcel支持对实体类中的属性进行注解,方便后续进行读写操作。
id 为 表头,index 代表的是 第0行
@ExcelProperty(value="id",index=0)
新建一个 ExcelModel 实体(需要继承 BaseRowModel)
package com.zh.oukele.model; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.metadata.BaseRowModel; /** * 表格实体 */ public class ExcelMode extends BaseRowModel /** * 第一列的数据 */ @ExcelProperty(index = 0) private String column1; /** * 第二列的数据 */ @ExcelProperty(index = 1) private String column2; public void setColumn1(String column1) this.column1 = column1; public String getColumn1() return column1; public String getColumn2() return column2; public void setColumn2(String column2) this.column2 = column2; @Override public String toString() return "ExcelMode" + "column1=‘" + column1 + ‘\‘‘ + ", column2=‘" + column2 + ‘\‘‘ + ‘‘;
同步读取 ( 数据量大的时候,不推荐使用,内存消耗比较大 )
// 简单读取 (同步读取) public static void simpleRead() // 读取 excel 表格的路径 String readPath = "C:\\Users\\oukele\\Desktop\\模拟数据.xlsx"; try // sheetNo --> 读取哪一个 表单 // headLineMun --> 从哪一行开始读取( 不包括定义的这一行,比如 headLineMun为2 ,那么取出来的数据是从 第三行的数据开始读取 ) // clazz --> 将读取的数据,转化成对应的实体,需要 extends BaseRowModel Sheet sheet = new Sheet(1, 1, ExcelMode.class); // 这里 取出来的是 ExcelModel实体 的集合 List<Object> readList = EasyExcelFactory.read(new FileInputStream(readPath), sheet); // 存 ExcelMode 实体的 集合 List<ExcelMode> list = new ArrayList<ExcelMode>(); for (Object obj : readList) list.add((ExcelMode) obj); // 取出数据 StringBuilder str = new StringBuilder(); str.append(""); String link = ""; for (ExcelMode mode : list) str.append(link).append("\""+mode.getColumn1()+"\":").append("\""+mode.getColumn2()+"\""); link= ","; str.append(";"); System.out.println(str); catch (FileNotFoundException e) e.printStackTrace();
异步读取
新建一个 ExcelModelListener 监听类出来,并且 继承 AnalysisEventListener 类
package com.zh.oukele.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.zh.oukele.model.ExcelMode; import java.util.ArrayList; import java.util.List; /*** * 监听器 */ public class ExcelModelListener extends AnalysisEventListener<ExcelMode> /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 5; List<ExcelMode> list = new ArrayList<ExcelMode>(); private static int count = 1; @Override public void invoke(ExcelMode data, AnalysisContext context) System.out.println("解析到一条数据: "+ data.toString() +" "); list.add(data); count ++; if (list.size() >= BATCH_COUNT) saveData( count ); list.clear(); @Override public void doAfterAllAnalysed(AnalysisContext context) saveData( count ); System.out.println("所有数据解析完成!"); System.out.println(" count :" + count); /** * 加上存储数据库 */ private void saveData(int count) System.out.println(" "+ count +" 条数据,开始存储数据库!" + list.size()); System.out.println("存储数据库成功!");
进行读取
// 异步读取 public static void simpleRead1() // 读取 excel 表格的路径 String readPath = "C:\\Users\\oukele\\Desktop\\模拟数据.xlsx"; try Sheet sheet = new Sheet(1,1,ExcelMode.class); EasyExcelFactory.readBySax(new FileInputStream(readPath),sheet,new ExcelModelListener()); catch (FileNotFoundException e) e.printStackTrace();
详细案例学习地址: https://github.com/alibaba/easyexcel/blob/master/quickstart.md
本次案例详细地址:
以上是关于使用 EasyExcel 读取Excel(两种方式)的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC 5.0.4集成easyexcel读取excel文档