引入 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();
} }

读取出来的日期 是 double 类型,转换一下

                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(mode.getColumn2()));
String time = sdf.format(date);
System.out.println(time);

详细案例学习地址: https://github.com/alibaba/easyexcel/blob/master/quickstart.md

本次案例详细地址:https://github.com/oukele/EasyExcelDemo

使用 EasyExcel 读取Excel(两种方式)的更多相关文章

  1. 将图片base64格式转换为file对象并读取(两种方式读取)

    两种方式读取,一种URL.createObjectURL,另一种fileReader   var base64 = ` data:image/jpeg;base64,/9j/4AAQSkZJRgABA ...

  2. delphi 读取excel 两种方法

    http://www.cnblogs.com/ywangzi/archive/2012/09/27/2705894.html 两种方法,一是用ADO连接,问题是Excel文件内容要规则,二是用OLE打 ...

  3. Excel文件读取的两种方式

    1.Pandas库的读取操作 from pandas import read_excel dr=read_excel(filename,header) dr#dataframe数据 dw=DataFr ...

  4. js 实现纯前端将数据导出excel两种方式,亲测有效

    由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,兼容chrome没问题,其他还没有测试过 通过将json遍历进行字符串拼接,将字符串输出到csv文件,输出的文件不会再是 ...

  5. 论 Python Opencv 中文路径及中文文件名图像文件读取的两种方式

    python 2中对于中文字符的处理可谓是诟病已久,虽然python 3 使用统一编码解决了中文字符串的问题,但在使用opencv中imread函数读取中文路径图像文件时仍会报错. 1) 借助nump ...

  6. C#读取Excel五种方式的体会

    原地址: http://blog.csdn.net/dapengbusi/article/details/38117817 http://blog.csdn.net/dapengbusi/articl ...

  7. 两种方式实现java生成Excel

    Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ...

  8. .NET环境下导出Excel表格的两种方式和导入两种类型的Excel表格

    一.导出Excel表格的两种方式,其中两种方式指的是导出XML数据类型的Excel(即保存的时候可以只需要修改扩展名为.xls)和真正的Excel这两种. using System; using Sy ...

  9. 简介C#读取XML的两种方式

    简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...

  10. java中读取配置文件ResourceBundle和Properties两种方式比较

    今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...

随机推荐

  1. uniapp跨域两次请求解决方案

    引入qs模块 使用 qs模块将data序列化,再传递,注意header必须设置为 'content-type':'application/x-www-form-urlencoded', import ...

  2. PCL学习(一)从PLY文件读入点云数据

    #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #inclu ...

  3. 【转帖】计算机网络协议(三)——UDP、TCP、Socket

    计算机网络协议(三)——UDP.TCP.Socket 2019年09月04日 11:09:41 to_be_better_one 阅读数 28794 文章标签: 计算机网络UDPTCPSocket 更 ...

  4. java源码 --List、Set、Collection

    List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中的集合,不能有重复的元素.List和Set都有它们各自的实现类. 为了方便,我们抽 ...

  5. LIUNX随堂学习-3 权限

    1.权限分为三类:读r,写w,执行x 2.读r:可以ls改目录下的子文件名,子目录名 写w:可以在该目录下创建.删除.重命名 执行x:可以cd到该目录下 3. ll  (ls -l) 下详细信息的意义 ...

  6. 1187: 零起点学算法94——今年暑假不AC(Java)

    1187:零起点学算法94--今年暑假不AC Time Limit: 1 Sec Memory Limit: 32 MB 64bit IO Format: %lld Description " ...

  7. axios 发送post请求

    目录 方案一 方案二 方案一 在node中使用axios以post的方式发送一张图片给某个server时: let data = fs.createReadStream(__dirname + '/t ...

  8. 【计算几何】Water Testing

    Water Testing 题目描述 You just bought a large piece of agricultural land, but you noticed that – accord ...

  9. 如何使用JavaScript实现纯前端读取和导出excel文件(转)

    转自小茗同学博客:https://www.cnblogs.com/liuxianan/p/js-excel.html js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯 ...

  10. PHP传引用赋值底层的变化

    $a = 3;$b = &$a;//传引用,即地址赋值 使用xdebug_debug_zval('a');使用xdebug_debug_zval('b');运行结果为:a:(refcount= ...