You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取Excel文件数据时出现Null Pointer Exception的问题求助

排查Java读取Excel时的空指针异常问题

嗨,我来帮你定位这个空指针异常的问题!结合你的代码和Excel场景,大概率是这几个原因导致的,咱们一步步来分析:

可能的异常原因

  • 行对象为null:sheet.getRow(i)会返回null,如果Excel里对应的行是完全空白的(哪怕你手动插入了行但没填任何数据,POI也会认为这行不存在)。你的循环从i=1开始,如果第2行(POI索引从0开始)是空白行,调用getCell(0)就会直接触发空指针。
  • 单元格对象为null:就算行存在,getCell(0)也可能返回null——如果这个单元格完全没有数据(连格式都没设置过),这时候调用getStringCellValue()自然会报错。
  • (小概率)文件或工作表不存在:虽然你的代码里没报文件找不到的错,但还是可以确认下D:\TestData.xls确实存在,且工作表索引0对应的是你要读取的sheet。

解决办法:增加null判断+单元格类型处理

我给你修改了代码,加入了完整的空值校验,还有单元格类型兼容处理(避免后续出现类型转换异常):

@Test 
public void dataProviderMethod() throws InvocationTargetException, FileNotFoundException { 
    try { 
        File src = new File("D:\\TestData.xls"); 
        FileInputStream fis = new FileInputStream(src); 
        HSSFWorkbook wb = new HSSFWorkbook(fis); 
        HSSFSheet sheet = wb.getSheetAt(0); 
        
        // 先判断工作表是否存在
        if (sheet == null) {
            System.out.println("目标工作表不存在,请检查sheet索引");
            return;
        }
        
        int rowcount = sheet.getLastRowNum() + 1; 
        System.out.println("总行数:" + rowcount); 
        
        for(int i = 1; i < rowcount; i++) { 
            HSSFRow row = sheet.getRow(i);
            // 判断当前行是否为空,为空则跳过
            if (row == null) {
                System.out.println("第" + (i+1) + "行(POI索引" + i + ")为空,跳过");
                continue;
            }
            
            HSSFCell cell = row.getCell(0);
            String questionType = "";
            // 处理单元格为空或不同类型的情况
            if (cell != null) {
                switch (cell.getCellType()) {
                    case STRING:
                        questionType = cell.getStringCellValue().trim(); // 去除首尾空格
                        break;
                    case NUMERIC:
                        // 如果是数字类型(比如序号),转换为字符串
                        questionType = String.valueOf((int) cell.getNumericCellValue());
                        break;
                    case BLANK:
                        questionType = "";
                        break;
                    default:
                        questionType = cell.toString().trim();
                }
            }
            System.out.println("第" + (i+1) + "行的questionType:" + questionType); 
        } 
        
        // 记得关闭资源,避免内存泄漏
        wb.close();
        fis.close();
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
}

额外排查建议

  1. 打开你的Excel,检查第2行(对应代码里的i=1)是否真的有数据,有没有完全空白的行;
  2. 确认A列的单元格都有内容,没有完全空的单元格;
  3. 可以先打印row和cell的对象,看看哪个是null,精准定位问题点。

内容的提问来源于stack exchange,提问作者swapnil bargale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:55:40