EasyExcel解析横向表格

本文介绍了EasyExcel,一个用于快速处理大文件并避免内存溢出的Java库,重点讲解了如何使用EasyExcelListener解析Excel,特别是横向表格的处理方法,以及注意事项。
摘要由CSDN通过智能技术生成

EasyExcel简介

EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

EasyExcel解析

easyexcel解析分为纵向表格和横向表格的解析,可参考官方文档内的案例对纵向表格解析:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read
此处主要记录横向表格/无规律表格的解析

1、创建EasyExcelListener继承AnalysisEventListener

@Slf4j
public class EasyExcelListener extends AnalysisEventListener<Object> {
    // 创建list集合封装最终的数据
    private List<Object> list = new ArrayList<>();
    // sheet页索引
    private int sheetNo = 0;

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

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }

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

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

}

2、读取excel

inputStream = ftpUtilsIdc2Emos.downloadFile(item.getAbsolutePath());
EasyExcelListener easyExcelListener = new EasyExcelListener();
ExcelReader excelReader = EasyExcelFactory.read(inputStream, easyExcelListener).build();
List<ReadSheet> sheets = excelReader.excelExecutor().sheetList();
Map<Integer, List<LinkedHashMap>> sheetInfos = new HashMap<>(sheets.size());
for (ReadSheet sheet : sheets) {
    Integer sheetNo = sheet.getSheetNo();
    excelReader.read(sheet);
    sheetInfos.put(sheetNo, easyExcelListener.getListMap());
}
//最终数据
List<LinkedHashMap> mapList = sheetInfos.get(0);

!注意事项,以下表格为例

在这里插入图片描述

获取的横向表格数据为

[
	{"0":"流水号:","1":"流水号测试","5":"备注","6":"备注测试"},
	{"0":"申请单位","1":"单位测试","5":"有效时间段","6":"","7":"计划开通时间","8":"2023-12-04"},
	......
]

1、第一行数据a~j-1:工单标题测试(级别:特重)不会读取出来,第一行会被当作表头处理,需要用其他方式读取。
2、map内的key为字符串,如获取"申请单位"则为

mapList.get(1).get("0")

其他问题:

1、ExcelReader excelReader = EasyExcelFactory.read(inputStream, easyExcelListener).build();
当执行此行代码对流inputStream进行excel读取操作时,后续inputStream将不可再操作,如需对此inputStream进行操作,如上传至ftp,需要再次给inputStream进行赋值,如
inputStream = ftpUtilsIdc2Emos.downloadFile(item.getAbsolutePath());再次执行

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值