+EasyExcel学习
一、引入
在一个项目系统中,只要运行了,就会产生很多数据,一般会采用分页显示,但是为了方便浏览数据,一般都会做一个功能,导出成excel,而为了添加数据,也会做一个导入excel功能,进行批量导入。而现在在市场有很多这方面的技术,如Apache poi、jxl。但是这两种技术都存在一个问题,就是非常的耗内存,虽然poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但poi还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
而基于这一点,阿里巴巴开发出了EasyExcel,那么什么是EasyExcel?
二、EasyExcel简介
EasyExcel的是由阿里巴巴团队开发的快速、简单避免OOM的java处理Excel工具。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。github地址:https://github.com/alibaba/ea...,文档地址:https://alibaba-easyexcel.git... 。
三、EasyExcel之导入,导出
创建一个maven工程,导入依赖:
[XML] _纯文本查看_ _复制代码_
<
`dependency`>
<
`groupId>com.alibaba</
groupId`>
<
`artifactId>easyexcel</
artifactId`>
<
`version>1.1.2-beat1</
version`>
</
`dependency`>
<!--非必要包,可以简略掉get,set方法-->
<
`dependency`>
<
`groupId>org.projectlombok</
groupId`>
<
`artifactId>lombok</
artifactId`>
<
`version>1.18.2</
version`>
</
`dependency`>
<!--测试-->
<
`dependency`>
<
`groupId>junit</
groupId`>
<
`artifactId>junit</
artifactId`>
<
`version>4.12</
version`>
<
`scope>test</
scope`>
</
`dependency`>
读取的文件如下:
1.读取指定文件
[Java] _纯文本查看_ _复制代码_
/**
*读取指定文件
*/
@Test
public
void
read(){
/*文件路径*/
String filePath = "D:\\user.xlsx";
try(InputStream fileStream=new FileInputStream(filePath) ) {
/*Sheet:表格对象,第一个参数代表表格的索引,即第几个表格,第二个参数是从第几行开始,默认第一行是0*/
Sheet sheet=
`new
Sheet(1
,0
);`
List<Object> read = EasyExcelFactory.read(fileStream, sheet);
for
(Object object :
read) {
System.out.println(object);
}
}
catch
(Exception e) {
e.printStackTrace();
}
}
输出如下:
2.生成excel
[Java] _纯文本查看_ _复制代码_
@Test
public
void
write()
throws
FileNotFoundException {
// 生成EXCEL并指定输出路径
OutputStream out =
new
FileOutputStream(
`"D:\out.xlsx"`);
ExcelWriter writer =
new
ExcelWriter(out, ExcelTypeEnum.XLSX);
// 设置,第一个参数是第几个表格,第二个参数是从第几行开始
Sheet sheet =
new
Sheet(
`1,` `0
);`
//设置表格名
sheet.setSheetName(
`"sheet1"`);
// 设置标题
Table table =
new
Table(
`1`);
List<List<String>> titles =
new
ArrayList<List<String>>();
titles.add(Arrays.asList(
`"用户名"`));
titles.add(Arrays.asList(
`"年龄"`));
titles.add(Arrays.asList(
`"生日"`));
titles.add(Arrays.asList(
`"地址"`));
table.setHead(titles);
// 查询数据导出即可 比如说一次性总共查询出100条数据
List<List<String>> userList =
new
ArrayList<>();
for
(
`int
i =
0; i <` `100
; i++) {`
userList.add(Arrays.asList(
"小明"
+ i, String.valueOf(i),
new
Date().toString(),
`"幸福路"+i+
"号"`));
}
writer.write0(userList, sheet, table);
writer.finish();
}
生成的表格: