java的esayexcel导入工具类,并测试
时间: 2023-08-18 10:04:13 浏览: 106
java导出到excel的工具类
5星 · 资源好评率100%
好的,关于Java的EasyExcel导入工具类,下面是一个示例代码,你可以参考一下:
```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.metadata.Table;
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.ReadTable;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Excel导入工具类
*/
public class ExcelImportUtil<T> {
/**
* 导入Excel
*
* @param file Excel文件
* @param clazz 实体类的Class
* @param listener 监听器,用于处理每行数据
*/
public void importExcel(File file, Class<T> clazz, ReadListener<T> listener) {
// 创建读取Excel的Builder
ExcelReaderBuilder builder = EasyExcel.read(file, clazz, listener);
// 配置Sheet和Table的信息
builder = builder.sheet().headRowNumber(1);
// 开始读取Excel
builder.doRead();
}
/**
* 导入Excel
*
* @param file Excel文件
* @param clazz 实体类的Class
* @param sheetNo Sheet序号,从0开始
* @param listener 监听器,用于处理每行数据
*/
public void importExcel(File file, Class<T> clazz, int sheetNo, ReadListener<T> listener) {
// 创建读取Excel的Builder
ExcelReaderBuilder builder = EasyExcel.read(file, clazz, listener);
// 配置Sheet和Table的信息
ReadSheet readSheet = EasyExcel.readSheet(sheetNo).headRowNumber(1).build();
builder = builder.readSheet(readSheet);
// 开始读取Excel
builder.doRead();
}
/**
* 导入Excel
*
* @param file Excel文件
* @param clazz 实体类的Class
* @param sheetNo Sheet序号,从0开始
* @param tableNo Table序号,从0开始
* @param listener 监听器,用于处理每行数据
*/
public void importExcel(File file, Class<T> clazz, int sheetNo, int tableNo, ReadListener<T> listener) {
// 创建读取Excel的Builder
ExcelReaderBuilder builder = EasyExcel.read(file, clazz, listener);
// 配置Sheet和Table的信息
ReadSheet readSheet = EasyExcel.readSheet(sheetNo).build();
ReadTable readTable = EasyExcel.readTable(tableNo).headRowNumber(1).build();
builder = builder.readSheet(readSheet).readTable(readTable);
// 开始读取Excel
builder.doRead();
}
/**
* 导入Excel,返回数据列表
*
* @param file Excel文件
* @param clazz 实体类的Class
* @param sheetNo Sheet序号,从0开始
* @param tableNo Table序号,从0开始
* @return 数据列表
*/
public List<T> importExcel(File file, Class<T> clazz, int sheetNo, int tableNo) {
List<T> dataList = new ArrayList<>();
// 创建监听器
AnalysisEventListener<T> listener = new AnalysisEventListener<T>() {
@Override
public void invoke(T data, AnalysisContext context) {
dataList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
};
// 导入Excel
importExcel(file, clazz, sheetNo, tableNo, listener);
return dataList;
}
}
```
这个工具类使用了阿里巴巴的EasyExcel库来读取Excel文件。其中,importExcel方法可以根据Sheet和Table的序号来读取数据,也可以传入一个监听器来处理每行数据。另外,还提供了一个可以返回数据列表的方法。
你可以使用下面的代码来测试这个工具类:
```java
public class ExcelImportUtilTest {
public static void main(String[] args) {
ExcelImportUtil<TestData> util = new ExcelImportUtil<>();
File file = new File("test.xlsx");
// 读取第1个Sheet的数据
util.importExcel(file, TestData.class, 0, new TestListener());
// 读取第2个Sheet的第1个Table的数据
List<TestData> dataList = util.importExcel(file, TestData.class, 1, 0);
System.out.println(dataList);
}
/**
* 监听器,用于处理每行数据
*/
private static class TestListener extends AnalysisEventListener<TestData> {
@Override
public void invoke(TestData data, AnalysisContext context) {
System.out.println(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
}
}
```
这个示例代码中,我们首先创建了一个Excel文件(test.xlsx),其中包含了两个Sheet,每个Sheet都包含了一个Table。然后,我们使用ExcelImportUtil来读取这个Excel文件中的数据,并分别输出到控制台中。
注意:在运行这个示例代码之前,需要先在项目中添加EasyExcel的依赖。你可以在pom.xml文件中添加以下内容:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.3.0</version>
</dependency>
```
阅读全文