尝试生成法语的xls时获取空指针异常

时间:2018-11-26 08:00:20

标签: excel apache apache-poi xlsx hssfworkbook

在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错误[stderr](http-localhost / 127.0.0.1:8080-4)java.lang.NullPointerException

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

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在org.apache.poi.hssf.model.Workbook.serialize(Workbook.java:732)上出现[stderr](http-localhost / 127.0.0.1:8080-4)

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

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

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

1 个答案:

答案 0 :(得分:0)

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

问题的根本原因。

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

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

因此,请避免工作表名称的宪章少于31个,并且工作表名称中不得包含/ *?[]特殊字符。