EasyExcel-读取多个sheet的方法

官方文档


读取多个工作表的方法

主要代码

以下是如何使用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> {

    @Override
    public void invokeHeadMap(Map headMap, AnalysisContext context) {
        super.invokeHeadMap(headMap, context);
        // 在这里可以处理工作表的头部信息
    }

    @Override
    public void invoke(Map integerObjectMap, AnalysisContext analysisContext) {
        // 每读取一行数据,都会调用此方法
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 所有数据解析完成后调用
    }
}

监听器示例

以下是一个简单的监听器示例,用于演示如何实现数据的读取和处理。这个监听器不会由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("存储数据库成功!");
    }
}
版权声明:程序员胖胖胖虎阿 发表于 2024年12月27日 下午8:43。
转载请注明:EasyExcel-读取多个sheet的方法 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...