官方文档
读取多个工作表的方法
主要代码
以下是如何使用EasyExcel读取Excel文件中多个工作表的示例代码:
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.ExcelListener;
import com.alibaba.excel.read.metadata.ExcelTypeEnum;
import java.io.ByteArrayInputStream;
public class ExcelReaderExample {
public void readMultipleSheets() {
ByteArrayInputStream is = new ByteArrayInputStream(new byte[1024]);
EasyExcel.read(is, new ExcelListener())
.excelType(ExcelTypeEnum.XLSX)
.doReadAll();
}
}
监听器(ExcelListener)
自定义监听器是处理Excel文件数据的关键部分。每个工作表的读取都会触发监听器的执行,创建一个新的监听器对象。通过扩展AnalysisEventListener
,我们可以将导入的数据编号,并且以Map格式接收,避免了使用Java对象。
package com.cc.eed.service.impl;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.Map;
/**
* 自定义Excel监听器,用于处理Excel文件中的数据。
*
* @author --
* @since 2024/12/25
*/
public class ExcelListener extends AnalysisEventListener
监听器示例
以下是一个简单的监听器示例,用于演示如何实现数据的读取和处理。这个监听器不会由Spring管理,需要在每次读取Excel时新建实例,并通过构造方法传递Spring管理的类。
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.data.ReadCellData;
import java.util.List;
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Slf4j
public class DemoDataListener extends AnalysisEventListener {
private static final int BATCH_COUNT = 100;
private List cachedDataList = new ArrayList<>(BATCH_COUNT);
private DemoDAO demoDAO;
public DemoDataListener() {
demoDAO = new DemoDAO();
}
public DemoDataListener(DemoDAO demoDAO) {
this.demoDAO = demoDAO;
}
@Override
public void invoke(DemoData data, AnalysisContext context) {
log.info("解析到一条数据:{}", data);
cachedDataList.add(data);
if (cachedDataList.size() >= BATCH_COUNT) {
saveData();
cachedDataList = new ArrayList<>(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
log.info("所有数据解析完成!");
}
private void saveData() {
log.info("{}条数据,开始存储数据库!", cachedDataList.size());
demoDAO.save(cachedDataList);
log.info("存储数据库成功!");
}
}
相关文章
暂无评论...