(1)Excel导入导出的应用场景
① 数据导入:减轻录入工作量
② 数据导出:统计信息归档
③ 数据传输:异构系统之间数据传输
(2)EasyExcel 简介
EasyExcel的特点:
Java 领域解析、生成 Excel 比较有名的框架有 Apache poi、jxl 等。但他们都存在一个严重的问题就是非常的耗内存。 如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会 OOM 或者JVM频繁的 full gc。
EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。 EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。
(3)GitHub 地址:
https://github.com/alibaba/easyexcel
(4)测试 EasyExcel 写操作
① 引入 EasyExcel 依赖,EasyExcel 对 poi 的封装
注意:单独使用,还需要引入 poi 的依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
</dependencies>
② 在 src/test/java 下创建包:com.xzy.edu.service.edu.excel
创建包:model
创建实体类 DemoData,与 Excel 数据对应
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DemoData {
// 设置 Excel 表头名称
@ExcelProperty("id")
private int id;
@ExcelProperty("name")
private String name;
@ExcelProperty("sex")
private String sex;
@ExcelProperty("age")
private int age;
}
创建包:main
public class MyTest {
public static void main(String[] args) {
// 实现 excel 写操作
// 1、设置写入excel数据的文件夹路径和名称
String filePath = "D:\\student.xls";
/*
* 2、调用 EasyExcel 中的方法实现写操作
* 参数 1:文件路径名称
* 参数 2:实体类的 class 类型
*/
EasyExcel.write(filePath, DemoData.class).sheet("学生信息列表").doWrite(getData());
}
// 实现 excel 写操作
public static void readFromExcel(){
// 1、设置写入excel数据的文件夹路径和名称
String filePath = "D:\\student.xls";
EasyExcel.read(filePath, DemoData.class, new ExcelListener()).sheet().doRead();
}
// 方法:返回 List 集合
private static List<DemoData> getData(){
List<DemoData> list = new ArrayList<DemoData>();
List<DemoData> list = new ArrayList<DemoData>();
DemoData data1 = new DemoData(1001,"博","男",21);
DemoData data2 = new DemoData(1002,"博博","男",23);
DemoData data3 = new DemoData(1003,"啵啵啵","女",20);
DemoData data4 = new DemoData(1004,"博博博博","男",22);
list.add(data1);
list.add(data2);
list.add(data3);
list.add(data4);
return list;
}
}
(5)测试 EasyExcel 读操作
① 在 src/test/java 下创建包:com.xzy.edu.service.edu.excel.listener
创建监听类 ExcelListener
public class ExcelListener extends AnalysisEventListener<DemoData> {
// 一行一行读取 excel 表格中的数据
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
System.out.println("***** " + demoData);
}
// 读取表头内容
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头:" + headMap);
}
// 读取完成之后
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
② 修改实体类 DemoData
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DemoData {
// 设置 Excel 表头名称
@ExcelProperty("id")
private int id;
@ExcelProperty("name")
private String name;
@ExcelProperty("sex")
private String sex;
@ExcelProperty("age")
private int age;
}
③ 修改主类 MyTest
public class ReadTest {
public static void main(String[] args) {
// writeToExcel();
readFromExcel();
}
// 实现 excel 写操作
public static void writeToExcel(){
// 1、设置写入excel数据的文件夹路径和名称
String filePath = "D:\\student.xls";
/*
* 2、调用 EasyExcel 中的方法实现写操作,流对象会自动关闭
* 参数 1:文件路径名称
* 参数 2:实体类的 class 类型
*/
EasyExcel.write(filePath, DemoData.class).sheet("学生信息列表").doWrite(getData());
}
// 实现 excel 写操作
public static void readFromExcel(){
// 1、设置写入excel数据的文件夹路径和名称
String filePath = "D:\\student.xls";
EasyExcel.read(filePath, DemoData.class, new ExcelListener()).sheet().doRead();
}
// 方法:返回 List 集合
private static List<DemoData> getData(){
List<DemoData> list = new ArrayList<DemoData>();
DemoData data1 = new DemoData(1001,"博","男",21);
DemoData data2 = new DemoData(1002,"博博","男",23);
DemoData data3 = new DemoData(1003,"啵啵啵","女",20);
DemoData data4 = new DemoData(1004,"博博博博","男",22);
list.add(data1);
list.add(data2);
list.add(data3);
list.add(data4);
return list;
}
}
标签:读写操作,实现,excel,EasyExcel,list,DemoData,new,class
From: https://blog.51cto.com/u_16230968/7886741