Apache POI创建xls文件调用Sheet.getRow报空指针异常问题求助
问题根因
你怀疑的general为null不成立,HSSFWorkbook.createSheet()执行成功后必然返回有效的Sheet实例,空指针的触发源是general.getRow(0)返回null:新创建的工作表中不存在任何行,getRow()只会读取已经创建过的行,未创建的行调用会返回null,后续调用row.getCell()就会触发空指针。
解决方案
- 读取行前先判断行是否存在,不存在的话先调用
createRow()创建对应行 - 读取单元格前同样判断单元格是否存在,不存在则调用
createCell()创建对应单元格 - 如果是要给空白单元格赋值,优先直接创建行和单元格,不需要先走get逻辑
修正后代码示例
兼容已存在行/单元格的通用写法
Workbook wb = new HSSFWorkbook(); Sheet general=wb.createSheet("General"); // 先判断行是否存在,不存在则创建 Row row = general.getRow(0); if (row == null) { row = general.createRow(0); } // 先判断单元格是否存在,不存在则创建 Cell cell = row.getCell(1); if (cell == null) { cell = row.createCell(1); } // 后续即可正常给cell设置值 cell.setCellValue("需要填入的内容");
全新空白文件的简化写法
如果确认是全新创建的xls文件,对应行和单元格肯定不存在,可以直接创建不需要判断:
Workbook wb = new HSSFWorkbook(); Sheet general=wb.createSheet("General"); Row row = general.createRow(0); Cell cell = row.createCell(1); cell.setCellValue("需要填入的内容");
内容的提问来源于stack exchange,提问作者pollate2345
相关产品推荐
相关产品推荐

