EasyExcel解析多sheet页

背景

公司最近有需求,客户会一次性上传一个含有多个sheet页的excel。
公司用的是easyExcel,左思右想下 自己手写了个工具类。

公共处理excel解析代码
/**
     *
     * @param filePath excel文件路径
     * @param sheetNo  sheet位置  从0开始
     * @param startRowNo 开始读取的行号  从0开始
     * @param headRow  表头行号 从1开始
     * @param readRow  读取行数,-1表示读取所有行
     * @param clazz
     * @return
     * @param <T>
     */
    public static <T> List<T> readExcelToList(String filePath, int sheetNo, int startRowNo, int headRow, int readRow, Class<T> clazz) {
        List<T> resultList = new ArrayList<>();

        EasyExcel.read(filePath, clazz, new AnalysisEventListener<T>() {
            @Override
            public void invoke(T data, AnalysisContext context) {
                //当前行号
                Integer currentRowNo = context.readRowHolder().getRowIndex();
                //判断当前行号是否在读取范围内
                if (currentRowNo >= startRowNo) {
                    //如果读取所有,或者 当前行没有达到行数限制  则解析数据
                    if (readRow == -1 || currentRowNo < startRowNo + readRow) {
                        resultList.add(data);
                    }
                }
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                log.info("excel数据解析完成,sheetName:{},sheetNo:{}",context.readSheetHolder().getSheetName(),context.readSheetHolder().getSheetNo());
            }

        }).sheet(sheetNo).headRowNumber(headRow).doRead();

        return resultList;
    }

上面这段代码不难看懂,其实就是泛型封装了一下。大家都可以直接调用这个方法获取到自己解析后的excel里面的数据。

业务代码用法
        List<FyndiqlVerificationVo> fyndiqEconomyInvoices = ExcelUtils.readExcelToList("C:\\Users\\admin\\Downloads\\fyndiq3.1-3.31到账核销数据.xlsx", 0, 2, 1, -1, FyndiqlVerificationVo.class);

这个是我本地测试用的main方法。大家可以把这个filepath换成自己服务器的excel路径

效果展示

在这里插入图片描述

最后的list就是自己想要的数据。

场景二:

有的小伙伴不是这种从服务器取出来的路径 那也可以直接通过前端的媒体流来获取。

这个场景跟我的业务场景不太一样,我自己也写了一份,但是没有测试。

 @PostMapping(value = "/upload")
    public Result<?> upload(@RequestParam("file") MultipartFile file) {
                 List<AliexpressAccountTransfer> list = EasyExcel.read(file.getInputStream(), AliexpressAccountTransfer.class, null).sheet().doReadSync();

        return Result.ok("上传成功");
    }

这种就可以按照文件的流来读取。大家可以按照自己的需要改装一下我的这个工具类。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,根据您的问题,我假设您已经使用EasyExcel成功解析Excel表格,并且得到了解析结果。现在您需要将解析结果添加到原Excel表格的每一行后,并将更新后的数据导出到指定的目标中。可以按照以下步骤操作: 1. 定义要添加的解析结果 假设您要将解析结果添加到每一行的最后一列之后,可以定义一个List,存放解析结果: ``` List<String> result = new ArrayList<>(); result.add("解析结果1"); result.add("解析结果2"); result.add("解析结果3"); // ... ``` 2. 读取Excel表格 使用EasyExcel读取Excel表格,得到Excel表格的数据: ``` // 定义Excel读取监听器 ReadListener listener = new ReadListener() { // 实现onRead方法,在读取到每一行数据时调用 @Override public void onRead(List<Object> data, AnalysisContext context) { // 处理读取到的数据,并将解析结果添加到每一行的最后一列之后 int lastIndex = data.size() - 1; data.add(lastIndex + 1, result.get(context.readRowHolder().getRowIndex())); } }; // 使用EasyExcel读取Excel表格 ExcelReader reader = EasyExcel.read("input.xlsx", listener).build(); reader.read(); ``` 3. 写出更新后的数据 使用EasyExcel的write方法,将更新后的数据写出到指定的目标中,例如写出到本地文件: ``` // 创建ExcelWriter对象 ExcelWriter writer = EasyExcel.write("output.xlsx").build(); // 写出数据到Excel文件中 writer.write(data, sheet); // 关闭ExcelWriter对象 writer.finish(); ``` 其中,data表示更新后的数据,sheet表示要更新的sheet
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值