前言
前言:记录如何使用Java来实现对excel的读和写操作,用的是阿里封装的EasyExcel,使用起来非常的方便和简洁。
操作语言:Java8 工具:IDEA 项目结构:maven项目
强调:该文章虽然写的是对excel的读和写,但其实导出操作本质上也是往excel写入数据,而导入操作就是读取excel中的数据来展示到页面(或者是新增数据),所以在实际开发中,也是可以将这套操作应用到导入和导出的。
目的:该文章求的是步骤详细、过程简单,保证小白也能操作成功,希望能帮到大家~
1、EasyExcel是什么?
- Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
- EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
- EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。
应用场景
1、数据导入:减轻录入工作量 2、数据导出:统计信息归档 3、数据传输:异构系统之间数据传输
2、环境搭建
1、创建一个普通的maven项目 2、在pom中引入相关依赖
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!--xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--lombok用来简化实体类:需要安装lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
3、创建实体类
@Data
public class DemoData {
@ExcelProperty("学生编号")
private int sno;
@ExcelProperty("学生姓名")
private String sname;
}
3、实现excel写操作
1、创建一个测试类,在该类中创建方法循环设置要添加到Excel的数据
private static List<DemoData> getData(){
ArrayList<DemoData> demoData = new ArrayList<>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setSno(i);
data.setSname("Eric" + i);
demoData.add(data);
}
return demoData;
}
2、实现最终的添加操作
@Test
public void test1() {
String fileName = "E:\\write.xlsx";
EasyExcel.write(fileName,DemoData.class).sheet("学生列表").doWrite(getData());
}
3、运行该Test,去到指定路径查看生成的文件,写入成功~
4、实现excel读操作
创建一个excel表格(为了方便可以直接拿上面自动生成的excel表格数据)
1、创建接受数据的实体类
@Data
public class DemoData {
@ExcelProperty(value = "学生编号",index = 0)
private Integer sno;
@ExcelProperty(value = "学生姓名",index = 1)
private String sname;
}
2、创建读取操作的监听器
public class ExcelListener extends AnalysisEventListener<DemoData> {
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
System.out.println("excel内容:" + demoData);
}
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头:" + headMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("读完啦、。。。,");
}
}
3、调用实现最终的读取
@Test
public void test2() {
String fileName = "E:\\write.xlsx";
EasyExcel.read(fileName,DemoData.class,new ExcelListener()).sheet().doRead();
}
4、运行成功,看控制台,可以看到数据已经全部读取到了(数据都取到了,此时啥操作做不了呢~)
总结
在操作过程中如有不懂或遇到啥困难,可在下方留言,作者看到会在第一时间回复~
|