20-1-EasyExcel技术调研(实现)
大约 3 分钟
20-1-EasyExcel技术调研(实现)
如何调研
如何学习技术
- 搞清楚是什么,有什么用?
- 怎么用?
- 对比同类技术的优势劣势
为什么要调研EasyExcel,因为我们要做一个线索的批量导入功能,
因为线下做活动或线上做推广的时候(比如你留一个手机号给给你一瓶水),活动的运营人员会收取很多的手机号,个人信息,这些手机号不可能让活动人员到我们的crm系统中一个一个进行录入,他最多整理成一份excel,然后在crm端应该有一个功能,这个功需要能批量的导入excel中的线索到我们的数据库中
线索模板如下图所示:

线索数据如下图所示:

资料准备
在学员任务资料-任务22-技术应用
- 线索模板-clues.xlsx (线索数据的模板)
- 线索数据-2100clues.xlsx (线索模板)
那么多的数据,需要利用技术解析出每一列的数据,整理好数据后存储到数据库中
调研EasyExcel
官网:https://easyexcel.opensource.alibaba.com/

我们先了解什么是EasyExcel


通过阅读官方官方文档来了解这个技术是什么
EasyExcel
EasyExcel入门案例
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

官网:https://easyexcel.opensource.alibaba.com/
版本支持
- 2+ 版本支持 Java7和Java6
- 3+ 版本至少 Java8
代码操作
导入的jar包同样也有提供
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
- 定义一个实体类,封装Excel文档数据(如图)

@Data
@EqualsAndHashCode
public class DemoData2 {
@ExcelProperty("序号")
private String id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("城市")
private String city;
}
- 使用EasyExcel.read读取文档信息,封装到对应的实体类中
public static void indexOrNameRead() {
//文档路径
String fileName = "D://exceldemo.xlsx";
// 这里默认读取第一个sheet
EasyExcel.read(fileName, DemoData2.class, new AnalysisEventListener<DemoData2>() {
@Override
public void invoke(DemoData2 demoData2, AnalysisContext analysisContext) {
log.info("解析到一条数据:{}", JSON.toJSONString(demoData2));
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("所有数据解析完成!");
}
}).sheet().doRead();
}
控制台输出:
14:14:59.151 [main] INFO com.sky.task.ExcelDemo - 解析到一条数据:{"city":"黄枫谷","id":"1","name":"韩立"}
14:14:59.151 [main] INFO com.sky.task.ExcelDemo - 解析到一条数据:{"city":"天鹰教","id":"2","name":"南宫婉"}
14:14:59.151 [main] INFO com.sky.task.ExcelDemo - 解析到一条数据:{"city":"java84期","id":"3","name":"天啸"}
14:14:59.151 [main] INFO com.sky.task.ExcelDemo - 所有数据解析完成!
private static void easyExcelExport() {
//准备假数据
ArrayList<DemoData2> list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
DemoData2 demoData2 = new DemoData2();
demoData2.setCity("长沙"+i);
demoData2.setId(i+1+"");
demoData2.setName("yangeit"+i);
list.add(demoData2);
}
//将数据写出到excel文档中,试用5000行以内的数据写出
EasyExcel.write("D://exceldemo2.xlsx", DemoData2.class)
.sheet("book")
.doWrite(list);
}