0

在 java 中使用 apache poi 生成 .xls 文件时出现空指针异常。

相同的代码在“英语语言”中运行良好,但它在尝试用“法语”语言生成时给了我空指针。

某些列具有空值,但我在创建单元格时正在处理那些空数据和空白单元格

尝试写出详细信息时获取空指针

"classExcel.write(out)";

以下是我在 DTO 中保存所有数据后用于生成 xls 的方法。

    public void ExcelGenerate(
    ClassExcelDTO classExcel,
    HttpServletResponse response,
    HttpServletRequest request) throws Exception {
    request.setCharacterEncoding("iso-8859-1");
    if( classExcel != null ){
            response.reset();
            response.setContentType("application/csv");
            response.setHeader("Content-disposition","attachment;filename=\"" + classExcel.getName + ".xls\"");
            try {
                if(null!=response && null!=response.getOutputStream()){
                OutputStream out = response.getOutputStream();

                if(null!=out)
                    try {
                        classExcel.write(out);
                    } catch (Exception e) {

                        e.printStackTrace();
                    }

                out.close();
                }
            } catch (SocketException sEx) {

            } catch (IOException io) {
            } catch (Exception e) {

            }
        } else {

        // Some code
        }
}

下面是生成的异常: 14:43:09,037 ERROR [stderr] (http-localhost/127.0.0.1:8080-4) java.lang.NullPointerException

14:43:09,037 错误 [stderr] (http-localhost/127.0.0.1:8080-4) 在 org.apache.poi.util.StringUtil.putCompressedUnicode(StringUtil.java:193)

14:43:09,037 错误 [stderr] (http-localhost/127.0.0.1:8080-4) 在 org.apache.poi.hssf.record.BoundSheetRecord.serialize(BoundSheetRecord.java:281)

14:43:09,037 错误 [stderr] (http-localhost/127.0.0.1:8080-4) 在 org.apache.poi.hssf.model.Workbook.serialize(Workbook.java:732)

14:43:09,037 错误 [stderr] (http-localhost/127.0.0.1:8080-4) 在 org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:786)

14:43:09,037 错误 [stderr] (http-localhost/127.0.0.1:8080-4) 在 org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:732)

如果有人有任何想法,请帮助我。

4

1 回答 1

0

我能够解决上述空指针异常。

问题的根本原因。

在使用法语创建每个选项卡时,我传递了包含超过 31 个字符的选项卡名称的 keyValue。但是 Apache POI 允许少于 31 个字符(异常-------------java.lang.IllegalArgumentException:工作表名称不能为空,大于 31 个字符,或包含任何 /*?[ ] ) 并且由于此空白(空)工作表名称,此空指针异常在编写工作簿时发生。

<i> [BOUNDSHEET]
     .bof             = 0
     .optionflags     = 0
     .sheetname length= 0
     .unicodeflag     = 0
     .sheetname       = null
</i>

所以避免工作表名称少于 31 个宪章和工作表名称不应包含任何 /*?[] 特殊字符。

于 2018-11-26T10:46:22.633 回答