引入 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. 4、1 IK分词器

    我们在浏览器地址栏输入 http://127.0.0.1:9200/_analyze?analyzer=chinese&pretty=true&text=我是程序员 默认的中文分词是将 ...

  2. K8S从入门到放弃系列-(12)Kubernetes集群Coredns部署

    摘要: 集群其他组件全部完成后我们应当部署集群 DNS 使 service 等能够正常解析,1.11版本coredns已经取代kube-dns成为集群默认dns. 1)下载yaml配置清单 [root ...

  3. WUSTOJ 1287: B304(Java:355ms,C:8ms)

    题目:

  4. go for range 可以方便的对slice 切片或者 map 进行迭代循环

    package main import (     "fmt"     "math/rand"     "time" ) func main ...

  5. 2019牛客多校一 H. XOR (线性基)

    大意: 给定序列, 求所有异或和为$0$的子序列大小之和. 先求出线性基, 假设大小为$r$. 对于一个数$x$, 假设它不在线性基内, 那么贡献为$2^{n-r-1}$ 因为它与其余不在线性基内数的 ...

  6. 深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用

    深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用 周翼南 北京大学 工学硕士 373 人赞同了该文章 基于深 ...

  7. hdu 4745 two Rabits

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4745 题解:首先要抽象出题目要求的是啥.首先对于环的问题, 我们可以倍增成链,然后环的所有情况可以通过链来 ...

  8. WebSocket协议探究(序章)

    一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...

  9. 【微信支付】公众号 JSAPI支付 HTML5(使用MUI前端框架)+WebApi 实现流程

    必要参数:      1) AppID,AppSecret : 在微信公众号后台管理—>(菜单栏)开发 —> 基本设置     2)商户号 :在微信公众号后台管理—>(菜单栏)微信支 ...

  10. javascript新特性

    让我们看看javascript中的一些新特性.本文将介绍它们的语法和相关链接,以帮助读者及时了解它们的进展.我们将通过编写一个小测试项目来演示如何快速使用这些新功能! 关于提案 提案分为五个阶段.有关 ...