easyExcel导出文件为空解决

背景

今天遇到个要做导出的需求,很快就确定了技术方案用easyExcel,因为poi据说会有OOM问题,作为没有接触特别大型项目的我就不去深究这个问题了。在操作过程中发现了一个问题,直接拷用官方文档的文件导出的文件是空的,在一番研究之下写出了后面的代码,实现了用easyExcel的导出。直接上干货

包引入

这里说个贼有意思的事情,官方文档也是写的简介,简介到pom依赖都没有写。官方文档传送门:
https://www.yuque.com/easyexcel/doc/write


            com.alibaba
            easyexcel
            2.2.9
        

请求处理代码

	@ApiOperation(value = "xxxx", notes = "xxxxxx")
    @GetMapping("/xxxx")
    @SneakyThrows
    public void exportProductInfo(@RequestBody @Valid QualifiedProductCommand command, HttpServletResponse response){
        command.getPagination().setPageSize(5000);
        ExportDTO exportDTO = finishedGoodsService.qualifiedProduct(command).getData();
        String fileName = System.currentTimeMillis() + ".xlsx";
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
        WriteSheet writeSheet =new WriteSheet();
        writeSheet.setHead(exportDTO.getTitle());
        writeSheet.setSheetName("xxx");
        excelWriter.write(exportDTO.getContent(),writeSheet);
        // 千万别忘记finish 会帮忙关闭流
        excelWriter.finish();
    }

此处对比官方文档的导出看:

@Test
    public void dynamicHeadWrite() {
        String fileName = TestFileUtil.getPath() + "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx";
        EasyExcel.write(fileName)
            // 这里放入动态头
            .head(head()).sheet("模板")
            // 当然这里数据也可以用 List> 去传入
            .doWrite(data());
    }

当时看这官方代码有点蒙圈,也纳闷为啥流都没有处理还能导出呢。怀疑这是导出到磁盘文件的写法,没去测试过。用官方给出的方式导出文件是空的。加上**EasyExcel.write(response.getOutputStream())**后,便有流可以导出。

如有问题,希望大家评论区留言多多指教!

你可能感兴趣的:(【Java】-,项目踩坑路,easyExcel,easyExcel导出文件为空)