EasyExcel填充数据报错的问题

2,743 阅读1分钟

问题描述

使用EasyExcel填充excel模板文件

信心代码如下

private static final String MODE_FILE_PATH = "templates/xxx.xls";

ExcelWriter excelWriter = null;
try {
    InputStream modeFileIn = this.getClass().getClassLoader().getResourceAsStream(MODE_FILE_PATH);
    //输出Excel流
    OutputStream outputStream = getOutputStream(FILE_NAME, ".xls", resp);
    excelWriter = EasyExcel.write(outputStream).withTemplate(modeFileIn).build();
    //获取工作区对象
    WriteSheet writeSheet = EasyExcel.writerSheet().build();
    //填充数据
    excelWriter.fill(taxesInfoVO, writeSheet);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    // 千万别忘记关闭流
    if (excelWriter != null) {
        excelWriter.finish();
    }
}

/**
 * 设置响应流参数
 *
 * @param fileName 下载文件名
 * @param fileType 文件格式,
 * @param response 响应流
 * @return
 */
public static OutputStream getOutputStream(String fileName, String fileType, HttpServletResponse response) {
    try {
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf8");
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName + fileType);
        response.setHeader("Pragma", "public");
        response.setHeader("Cache-Control", "no-store");
        response.addHeader("Cache-Control", "max-age=0");
        return response.getOutputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

调试报如下错误

image.png

分析

EasyExcel默认读取格式是xlsx,所以选择xls会导致异常也就是create workbook failure,但是如果非要是xls的格式的模板也可以避免这种异常。

excelWriter = EasyExcel.write(outputStream).withTemplate(modeFileIn).excelType(ExcelTypeEnum.XLS).build();