官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel (alibaba.com)
因为暂时项目没有用到,所以不急,知道了这个技术。就想着学着用一下!
最简单的读
先看官方文档给的用法和解释!!!
导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
创建实体类
自己准备一个Excel表格。
@Data
public class DemoData {
private String name;
private String sex;
private String age;
}
测试
官方提供了4种写法
写法一:
final String fileName = "C:\\Users\\gong'chao\\Desktop\\58_com_resumes_bj.xls";
/**
* 最简单的读 - 01
*/
@Test
void readExcel01(){
AtomicInteger i = new AtomicInteger();
EasyExcel.read(fileName, DemoData.class, new PageReadListener<DemoData>(dataList -> {
for (DemoData demoData : dataList) {
System.out.println("读取到一条数据" + JSON.toJSONString(demoData));
i.getAndIncrement();
}
// 输出集合长度
System.err.println(dataList.size());
})).sheet().doRead();
// 输出总行数
System.out.println(i);
}
点击PageReadListener查看源码:
默认是一行一行读取。然后可以再点进ListUtils中查看,可以知道,一行一行的将数据存进集合中,当长度到100时重新new一个集合,则原来的集合对象不被引用交给垃圾回收。这就是 Easy Excel 处理大文件内存溢出的一种方式吧。
--- 个人理解
然后可以看出实体类映射的三个字段输出的值不匹配。按照官网给出的注解:
@Data
public class DemoData {
@ExcelProperty(value = "姓名")
private String name;
@ExcelProperty(value = "性别")
private String sex;
@ExcelProperty(index = 5)
private String age;
}
可以指定列名,也可以指定下标。这样就正确映射了
写法二:内部类
/**
* 最简单的读 - 02
*/
@Test
void readExcel02(){
EasyExcel.read(fileName, DemoData.class, new ReadListener<DemoData>(){
// 单次缓存的数量
public static int BATCH_COUNT = 200;
// 临时存储
private List<DemoData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
@Override
public void invoke(DemoData data, AnalysisContext context) {
cachedDataList.add(data);
if(cachedDataList.size() >= BATCH_COUNT) {
System.err.println(cachedDataList.size());
System.err.println("已保存至数据库\n已完成清理 list");
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.err.println("已将剩余数据保存至数据库");
}
}).sheet().doRead();
}
写法三:外部类
定义一个类
public class read03 implements ReadListener<DemoData> {
// 单次缓存的数量
public static int BATCH_COUNT = 200;
// 临时存储
private List<DemoData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
public void invoke(DemoData data, AnalysisContext context) {
cachedDataList.add(data);
if(cachedDataList.size() >= BATCH_COUNT) {
System.err.println(cachedDataList.size());
System.err.println("已保存至数据库\n已完成清理 list");
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
public void doAfterAllAnalysed(AnalysisContext context) {
System.err.println("已将剩余数据保存至数据库");
}
}
/**
* 最简单的读 - 03
*/
@Test
void readExcel03(){
EasyExcel.read(fileName, DemoData.class, new read03()).sheet().doRead();
}
写法四:
/**
* 最简单的读 - 04
*/
@Test
void readExcel04(){
try (ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new read03()).build()) {
// 构建一个sheet 这里可以指定名字或者no
ReadSheet readSheet1 = EasyExcel.readSheet(0).sheetName("员工表").build();
ReadSheet readSheet2 = EasyExcel.readSheet(1).sheetName("请假表").build();
System.out.println(readSheet1.toString());
System.out.println(readSheet2.toString());
// 读取一个sheet
excelReader.read(readSheet1);
excelReader.read(readSheet2);
}
}
写法四中可以通过下标指定工作表和相应的名称。 文章来源:https://www.toymoban.com/news/detail-705922.html
总结
之后真正要用EasyExcel技术时再研究其他用法,之后再更新!文章来源地址https://www.toymoban.com/news/detail-705922.html
到了这里,关于EasyExcel入门(最简单的读)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!