java使用EasyExcel操作excel进行读写操作的详细基础代码.及简介
-
什么是easyExcel?
解释之前先贴出github上面官网的地址.https://github.com/alibaba/easyexcel
简而言之就是JAVA解析Excel工具EasyExcel.
再贴一段官方的话:
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便 -
EasyExcel操作excel进行读写操作
回到正题,如何操作?
步骤:
一:创建项目,实现EasyExcel对excel写操作 -
创建一个普通的maven项目
项目名为Easy-easyDemo -
引入xml相关的依赖在pom文件夹中
pom文件中添加依赖:
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
由于easyexcel本质上是对前项目poi做的封装,所以我们还需要引入poi的依赖(还要版本问题,像2.1.1的easyExcel对应版本poi的3.1.7):
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
- 创建实体类,和excel的数据对应上
package com.qiu.easyexcel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Demo {
//设置表头的名称
@ExcelProperty("学生编号")
private Integer sno;
@ExcelProperty("学生姓名")
private String name;
}
4.创建一个测试类
package com.qiu.easyexcel;
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class TestEasyExcel {
public static void main(String[] args) {
//实现excel写的操作,生成excel的内容
//1.设置写入文件夹地址和excel文件名称
String filename = "E:\\write.xlsx";
//2.调用easyEXcel里面的方法实现写操作
//第一个参数是文件路径名称,第二个是参数实体类
EasyExcel.write(filename,Demo.class).sheet("学生列表").doWrite(getData());
}
//创建方法使其返回list集合
private static List<Demo> getData(){
ArrayList<Demo> list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
Demo demo = new Demo();
demo.setSno(i);
demo.setName("qiuzhikang"+i);
list.add(demo);
}
return list;
}
}
测试运行:
没有报错,执行成功!
我们去路径下找一找有没有这个文件
打开看:
easyExcel实现写操作测试成功!
第二种方案:
接下来我们实现读操作:
1.创建和excel对应的实体类,标记对应列的关系
package com.qiu.easyexcel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Demo {
//设置表头的名称
@ExcelProperty(value = "学生编号",index = 0)
private Integer sno;
@ExcelProperty(value = "学生姓名",index = 1)
private String name;
}
2.创建一个监听进行excel文件的读取
package com.qiu.easyexcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.CellData;
import java.util.Map;
public class ExcelListener extends AnalysisEventListener<Demo> {
//一行一行读取excel的内容,横着一行一行读
@Override
public void invoke(Demo demo, AnalysisContext analysisContext) {
System.out.println("**************"+demo);
}
//读取表头之中的内容
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头:"+headMap);
}
//读完之后做的事情
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
- 最终方法的调用
package com.qiu.easyexcel;
import com.alibaba.excel.EasyExcel;
public class TestEasyExcelWrite {
public static void main(String[] args) {
//实现读操作
String filename = "E:\\write.xlsx";
EasyExcel.read(filename,Demo.class,new ExcelListener()).sheet().doRead();
}
}
最终测试:
我的依赖:
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
上一篇: 微信小程序中使用lodash的问题
下一篇: jQuery鼠标点击事件