easyexcel通用工具类
时间: 2023-11-04 14:54:07 浏览: 125
easyexcel通用工具类是基于EasyExcel框架的excel解析工具类。它封装了常用的方法,使用起来方便快捷。你可以使用EasyExcel的入口类EasyExcel来构建开始各种操作,例如读取和写入工作簿和工作表。读取工作簿对象需要使用ExcelReaderBuilder,写入工作簿对象需要使用ExcelWriterBuilder。如果需要读取或写入特定的工作表,可以使用ExcelReaderSheetBuilder和ExcelWriterSheetBuilder。在读取每一行数据后,可以使用ReadListener来处理数据,在操作包括创建单元格和创建表格时,可以使用WriteHandler来处理数据。通过封装这些方法,easyexcel通用工具类使得项目中的excel导入和导出更加方便。
相关问题
写一个easyExcel监听处理类的通用模板工具类,可以适配多个实体
好的,我可以为您提供一个基于EasyExcel的监听器通用模板工具类,可以适配多个实体。以下是代码示例:
```java
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* EasyExcel 监听器通用模板工具类,可以适配多个实体
*
* @param <T> 实体类泛型
*/
@Slf4j
public class CommonExcelListener<T> extends AnalysisEventListener<T> {
/**
* 每隔N条存储数据库,默认N为1,可以在构造函数中传入自定义值
*/
private static final int BATCH_COUNT = 1;
/**
* 数据行数
*/
private int rowIndex = 0;
/**
* 数据存储集合
*/
private List<T> dataList = new ArrayList<>();
/**
* 构造函数
*/
public CommonExcelListener() {
}
/**
* 读取Excel数据行,每读取一行数据就会调用一次该方法
*
* @param data 读取到的数据
* @param analysisContext 解析上下文
*/
@Override
public void invoke(T data, AnalysisContext analysisContext) {
rowIndex++;
log.info("解析到一条数据:{}", JSON.toJSONString(data));
dataList.add(data);
// 达到BATCH_COUNT,需要去存储一次数据库,防止数据过多内存溢出
if (dataList.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理数据
dataList.clear();
}
}
/**
* 所有数据解析完成后执行该方法
*
* @param analysisContext 解析上下文
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 数据解析完成后,如果数据集合中还有剩余数据,一并存储到数据库中
if (!CollectionUtils.isEmpty(dataList)) {
saveData();
}
log.info("读取Excel数据共{}行", rowIndex);
}
/**
* 将数据存储到数据库中
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", dataList.size());
// TODO 数据存储逻辑
}
}
```
使用方法如下:
```java
// 示例:读取 User 实体类对应的 Excel 数据
String fileName = "user.xlsx";
InputStream inputStream = new BufferedInputStream(new FileInputStream(fileName));
EasyExcel.read(inputStream, User.class, new CommonExcelListener<User>()).sheet().doRead();
```
您只需将 `CommonExcelListener` 复制到您的项目中,并根据实际需要修改 `saveData` 中的数据存储逻辑即可。同时在读取 Excel 数据时,只需传入对应的实体类和 `CommonExcelListener` 即可。
写一个easyExcel监听处理类的通用模板工具类,可以适配多个实体,不同实体可以调用对应的dao层存入数据库
好的,我可以为您提供一个基于EasyExcel的监听器通用模板工具类,可以适配多个实体,并且不同实体可以调用对应的DAO层存入数据库。以下是代码示例:
```java
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* EasyExcel 监听器通用模板工具类,可以适配多个实体,并且不同实体可以调用对应的DAO层存入数据库
*
* @param <T> 实体类泛型
*/
@Slf4j
public class CommonExcelListener<T> extends AnalysisEventListener<T> {
/**
* 每隔N条存储数据库,默认N为1,可以在构造函数中传入自定义值
*/
private static final int BATCH_COUNT = 1;
/**
* 数据行数
*/
private int rowIndex = 0;
/**
* 数据存储集合
*/
private List<T> dataList = new ArrayList<>();
/**
* 实体类对应的DAO层
*/
private BaseDAO<T> baseDAO;
/**
* 构造函数
*
* @param baseDAO 实体类对应的DAO层
*/
public CommonExcelListener(BaseDAO<T> baseDAO) {
this.baseDAO = baseDAO;
}
/**
* 读取Excel数据行,每读取一行数据就会调用一次该方法
*
* @param data 读取到的数据
* @param analysisContext 解析上下文
*/
@Override
public void invoke(T data, AnalysisContext analysisContext) {
rowIndex++;
log.info("解析到一条数据:{}", JSON.toJSONString(data));
dataList.add(data);
// 达到BATCH_COUNT,需要去存储一次数据库,防止数据过多内存溢出
if (dataList.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理数据
dataList.clear();
}
}
/**
* 所有数据解析完成后执行该方法
*
* @param analysisContext 解析上下文
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 数据解析完成后,如果数据集合中还有剩余数据,一并存储到数据库中
if (!CollectionUtils.isEmpty(dataList)) {
saveData();
}
log.info("读取Excel数据共{}行", rowIndex);
}
/**
* 将数据存储到数据库中
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", dataList.size());
// 调用实体类对应的DAO层存储数据
baseDAO.saveBatch(dataList);
}
}
```
使用方法如下:
```java
// 示例:读取 User 实体类对应的 Excel 数据,并调用 UserDAO 存储数据
String fileName = "user.xlsx";
InputStream inputStream = new BufferedInputStream(new FileInputStream(fileName));
BaseDAO<User> userDAO = new UserDAO(); // 假设 UserDAO 已经实现
EasyExcel.read(inputStream, User.class, new CommonExcelListener<User>(userDAO)).sheet().doRead();
```
您只需将 `CommonExcelListener` 复制到您的项目中,并根据实际需要修改 `saveData` 中的数据存储逻辑即可。同时在读取 Excel 数据时,只需传入对应的实体类、对应的DAO层和 `CommonExcelListener` 即可。
阅读全文