easyexcel 读取指定行数据_Excel神具EasyExcel,常见API

一、前言

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。

下面我们来简单学习一下EasyExcel的常用API。


二、关于常见类解析

  • EasyExcel 入口类,用于构建开始各种操作
  • ExcelReaderBuilder ExcelWriterBuilder 构建出一个 ReadWorkbook WriteWorkbook,可以理解成一个excel对象,一个excel只要构建一个
  • ExcelReaderSheetBuilder ExcelWriterSheetBuilder 构建出一个 ReadSheet WriteSheet对象,可以理解成excel里面的一页,每一页都要构建一个
  • ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据
  • WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据
  • 所有配置都是继承的,Workbook的配置会被Sheet继承,所以在用EasyExcel设置参数的时候,在EasyExcel...sheet()方法之前作用域是整个sheet,之后针对单个sheet
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 EasyExcel 读取 Excel 文件时,可以通过指定读取的起始和结束来实现读取指定的功能。 假设我们要读取 Excel 文件中的第 5 到第 10 ,可以按照以下步骤进: 1. 定义一个类,用于存储每数据: ``` public class MyData { @ExcelProperty("列名1") private String column1; @ExcelProperty("列名2") private String column2; // 其他属性以此类推 // getter 和 setter 方法 } ``` 2. 在代码中使用 EasyExcel 读取 Excel 文件: ``` String fileName = "path/to/file.xlsx"; int startRow = 4; // 起始为第5,因为号从0开始 int endRow = 9; // 结束为第10 List<MyData> dataList = new ArrayList<>(); EasyExcel.read(fileName, MyData.class, new MyDataListener(dataList)) .sheet().headRowNumber(startRow).doRead(); ``` 3. 定义一个监听器类,用于处理每数据: ``` public class MyDataListener extends AnalysisEventListener<MyData> { private List<MyData> dataList; public MyDataListener(List<MyData> dataList) { this.dataList = dataList; } @Override public void invoke(MyData data, AnalysisContext context) { dataList.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // do nothing } } ``` 在以上代码中,我们通过 `headRowNumber(startRow)` 方法指定读取的起始,通过 `doRead()` 方法开始读取 Excel 文件。在监听器的 `invoke` 方法中,我们将每数据添加到 `dataList` 中。最终,`dataList` 中将包含第 5 到第 10 的所有数据。 ### 回答2: 在EasyExcel中,要读取指定,可以通过以下步骤来实现: 1. 导入相关的类和包: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.Sheet; import com.alibaba.excel.read.builder.ExcelReaderBuilder; ``` 2. 创建一个自定义的监听器类(`MyExcelListener`),继承`AnalysisEventListener`,用于处理读取到的每一行数据: ```java public class MyExcelListener extends AnalysisEventListener<List<String>> { @Override public void invoke(List<String> rowData, AnalysisContext analysisContext) { // 处理每一行数据的逻辑 System.out.println(rowData); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 当所有数据分析完成后的逻辑 } } ``` 3. 创建一个ExcelReader对象,并指定读取的文件和监听器: ```java ExcelReaderBuilder readerBuilder = EasyExcel.read("path/to/file.xlsx", MyExcelListener.class); ``` 4. 创建一个Sheet对象,用于指定读取的工作表和起始号(下标从0开始): ```java Sheet sheet = new Sheet(0, 1); ``` 上述代码中,`Sheet(0, 1)`表示读取第1个工作表(下标从0开始),从第2开始读取数据。 5. 使用ExcelReader的`read`方法,传入Sheet对象,开始读取数据: ```java readerBuilder.read(sheet); ``` 通过以上步骤,就可以实现读取指定的操作了。你可以根据需要,进一步处理每一行数据,比如存储到集合中或进其他操作。 ### 回答3: EasyExcel是一款强大的Java操作Excel的开源库,可以用于读取、写入、处理Excel文件。要读取指定数据,可以通过以下步骤执: 1. 使用EasyExcel提供的API,创建一个读取Excel文件的实例,指定读取的文件路径和要读取的sheet名称。 ```java ExcelReader excelReader = EasyExcel.read("文件路径").sheet("sheet名称").build(); ``` 2. 定义一个Listener监听器,并重写其中的方法。在onSheet()方法中,根据指定数选择需要读取。在onRowData()方法中,处理每数据。 ```java excelReader.read(new AnalysisEventListener<T>() { @Override public void onSheet(int sheetIndex, Sheet sheet) { // 根据指定数选择需要读取 int startRow = 3; // 从第3开始读取 int endRow = 5; // 读取到第5结束 if (sheetIndex == 0) { sheet.setHeadLineMun(startRow); // 设置读取的起始数 sheet.setEndRowNumber(endRow); // 设置读取的结束数 } } @Override public void onRowData(int sheetIndex, int rowIndex, List<T> rowData) { // 处理每数据 System.out.println(rowData); } }).sheet().doRead(); ``` 3. 调用doRead()方法开始读取Excel文件并执监听器中的操作。在onRowData()方法中,即可获取到所选数据。 以上是使用EasyExcel读取指定的简单步骤。根据实际需求,可以灵活地调整startRow和endRow的值,以读取所需的数。同时,还可以根据需要对每数据进一步的处理和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值