在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)
如有任何想法,请帮助我。
答案 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个,并且工作表名称中不得包含/ *?[]特殊字符。