利用Easy excel读取导入复杂表格(多张sheet表,hutool工具类的一些使用)

表格内容如下

分析

如图所示,这个excel表格共有4张sheet表,我们可以将四张表一起读取到,然后对单个sheet分别解析,之后演示以第一张sheet表为例。

代码实现

1.准备工作

1) 首先在pom.xml中引入easy excel 依赖

    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
    </dependency>

引入hutool工具包依赖

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>

2)引入监听器

public class EasyExcelListener extends AnalysisEventListener<Object> {

    // 创建list集合封装最终的数据
    private List<Object> list = new ArrayList<>();
    // sheet页索引
    private int sheetNo = 0;

    @Override
    public void invoke(Object t, AnalysisContext context) {
        // 读取excle内容
        int currentSheetNo = context.readSheetHolder().getSheetNo();
        if (currentSheetNo != sheetNo) {
            // 如果不根据sheet页索引更新状态重新创建list,list会反复添加前面的sheet页对象值
            list = new ArrayList<>();
            sheetNo = currentSheetNo;
        }
        list.add(t);
    }

    // 读取excel表头信息
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
    }

    // 读取完成后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }

    /**
     * 获取表格内容(简单excel读取可用该方法)
     *
     * @param obj 需要转化的实体
     * @param <T>
     * @return
     */
    public <T> List<T> getList(Class<T> obj) {
        String jsonObj = JSONUtil.toJsonStr(list);
        return JSONUtil.toList(jsonObj, obj);
    }

    /**
     * 将表格转化为map集合(复杂excel读取用此方法)
     *
     * @return map集合
     */
    public List<LinkedHashMap> getListMap() {
        String jsonObj = JSONUtil.toJsonStr(list);
        return JSONUtil.toList(jsonObj, LinkedHashMap.class);
    }

}

关于使用LinkedHashMap存储的原因:因为当读取 Excel 文件内容时,如果我们不确定要映射到哪个具体的实体类,或者数据结构不固定时,LinkedHashMap是一种通用的存储方式

  • 不确定接收实体:在处理 Excel 文件时,可能事先不知道每一列的数据将映射到哪个具体的对象字段。比如,文件结构可能是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值