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

如何用Java POI操作Excel另一工作表?空指针异常问题求助

解决POI操作Excel Sheet2时的NullPointerException问题

你的空指针异常问题很典型——当你试图操作Excel里不存在的行或单元格时,Apache POI不会自动帮你创建它们,getRow()或getCell()会直接返回null,后续再调用方法自然就抛出NullPointerException了。比如你代码里的sheet2.getRow(3),如果Sheet2中第4行(POI的行索引从0开始计数)根本不存在,这个方法就会返回null,接着调用.getCell(2)肯定就炸了。

修复步骤

要解决这个问题,我们需要先检查行和单元格是否存在,不存在就主动创建:

  • 先判断目标行是否存在,不存在则用createRow()创建
  • 再判断目标单元格是否存在,不存在则用createCell()创建
  • 另外推荐使用try-with-resources语法,它会自动关闭流,避免资源泄漏

修改后的完整代码

public static void main(String[] args) {
    // 使用try-with-resources自动关闭流,无需手动close
    try (FileInputStream files = new FileInputStream(new File("d:\\Materi\\Selenium\\Projects\\Excel\\Book1.xlsx"));
         XSSFWorkbook workbook = new XSSFWorkbook(files);
         FileOutputStream fout = new FileOutputStream(new File("d:\\Materi\\Selenium\\Projects\\Excel\\Book1.xlsx"))) {

        // 获取Sheet1(如果不需要操作可注释)
        XSSFSheet sheet1 = workbook.getSheet("Sheet1");
        // 获取Sheet2,不存在则创建
        XSSFSheet sheet2 = workbook.getSheet("Sheet2");
        if (sheet2 == null) {
            sheet2 = workbook.createSheet("Sheet2");
        }
        
        // 检查并创建第4行(索引3)
        XSSFRow row = sheet2.getRow(3);
        if (row == null) {
            row = sheet2.createRow(3);
        }
        
        // 检查并创建第3列(索引2)的单元格
        XSSFCell cell = row.getCell(2);
        if (cell == null) {
            cell = row.createCell(2);
        }
        
        // 设置单元格值
        cell.setCellValue("Test");
        
        // 写入工作簿
        workbook.write(fout);

    } catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

额外提示

  • POI的行和单元格索引都是从0开始的,所以getRow(3)对应Excel里的第4行,getCell(2)对应第3列
  • 如果你的Sheet2本身都不存在,workbook.getSheet("Sheet2")会返回null,上述代码里已经加上了创建Sheet的判断,避免这种情况的空指针

内容的提问来源于stack exchange,提问作者Rifki Nurgraha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:59