[alibaba/easyexcel]无法把下载的文件设置为xlsx后缀名

2024-05-11 669 views
1

触发Bug的代码

       public static void exportExcel(String fileName, List data, Class clazz, HttpServletResponse response) {
        try {
            // 初始化样式
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            WriteFont headWriteFont = new WriteFont();
            headWriteFont.setFontHeightInPoints((short) 11);
            headWriteCellStyle.setWriteFont(headWriteFont);
            HorizontalCellStyleStrategy handler = new HorizontalCellStyleStrategy(headWriteCellStyle, new WriteCellStyle());

            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
            // 处理中文乱码
            String encode = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
            response.setHeader("Content-disposition", "attachment;filename=" + encode + ExcelTypeEnum.XLSX.getValue());
            EasyExcel.write(response.getOutputStream(), clazz)
                    .excelType(ExcelTypeEnum.XLSX)
                    .registerWriteHandler(handler)
                    .sheet("Sheet1")
                    .doWrite(data);
        } catch (IOException e) {
            throw new GlobalDefaultException(ResponseEnum.ERROR_EXCEL_EXPORT, e);
        }
    }

提示的异常或者没有达到的效果 下载出来的文件还是xls,然后打开的时候会有提醒 企业微信截图_20210425173713

回答

3

我对这个Bug感兴趣,希望在之后的几个月尝试解决这个bug @zhuangjiaju

6

@modefang 你好,我对这个问题很感兴趣,尝试复现了一下这个bug。

该bug的起因是在使用excelType()函数将后缀类型修改为XLSX时,程序并没有将ExcelWriterBuilder类中file文件输出流的文件路径后缀名进行修改,还是保留原来的xls后缀,所以在进行修改后,文件名没有发生变化。

我尝试在ExcelWriterBuilder中的excelType()函数中,在更改类型后对文件名的后缀进行判断,若是filexls类型,而更改后的excelTypeXLSX,则通过file()函数将file的后缀更改为xlsx

修复后程序执行结果如下:

screenshot

@zhuangjiaju 我会尝试提交一次pull request,希望进行code review。

3

?

2

导出文件名 后缀设置为xlsx