alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32.09k stars 7.5k forks source link

关于webflux 分块返回模板文件的问题 #3929

Open onkenut opened 1 month ago

onkenut commented 1 month ago

建议先去看文档

快速开始常见问题

异常代码

  private Flux<DataBuffer> getData( ) {

        return Flux.create(sink -> {
         ClassPathResource classPathResource = new ClassPathResource(
                    "template.xlsx");
            try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                InputStream inputStream = classPathResource .getInputStream();
                ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build(); ) {
                WriteSheet writeSheet = EasyExcel.writerSheet().build();
                while (dataList.isNotEmpty()) { 
                    excelWriter.fill(dataList, writeSheet);           
                    sink.next(convertOutputStreamToDataBuffer(outputStream)); 
                    outputStream.reset();                   
                    dataList=getList();
                }
                                excelWriter.finish();
                sink.complete();
            } catch (Exception e) {
                log.error("发送分片数据异常:{}", e);
                sink.error(e);
            }

        }); 
    }

异常提示

无异常但是使用webflux 返回文件无数据

问题描述

以上代码运行时无法按照所想的结果分批次返回fill的文件块,断点上看似乎是因为excelWriter.finish()时outputStream中才有数据? 假如数据集比较大 需要采用分次fill的形式 我需要在每次fill之后获取有数据的outputStream 应该怎么做?