使用Apache POI在Java中更新Excel文件时二次获取单元格返回null问题
解决Excel第二次获取单元格返回null的问题
我来帮你排查这个问题!从你给出的代码片段来看,第二次获取单元格返回null大概率是因为POI不会自动创建不存在的单元格/行,再加上代码里还有几个容易踩坑的点,咱们一步步来解决:
1. 核心问题:writeToCell方法未处理空行/空单元格
Apache POI的规则是:如果目标行或单元格不存在,getRow()和getCell()会直接返回null,不会自动创建。如果你的writeToCell方法没做判断就直接操作,自然会出现null的情况。
给你一个健壮的writeToCell实现:
private void writeToCell(int rowNum, int colNum, String value) { // 先获取行,不存在则创建 XSSFRow row = sheet.getRow(rowNum); if (row == null) { row = sheet.createRow(rowNum); } // 再获取单元格,不存在则创建 XSSFCell cell = row.getCell(colNum); if (cell == null) { cell = row.createCell(colNum); } // 赋值单元格内容 cell.setCellValue(value); }
2. 修复资源泄漏与未保存的问题
你的代码里还有两个致命问题:
- 打开的
FileInputStream没有关闭,会造成资源占用 - 修改后的Workbook没有写回文件,所有操作等于白做
用try-with-resources语法自动管理资源,同时添加写入逻辑:
public class ExcelWriter { XSSFSheet sheet; public ExcelWriter(List<String> nurses, List<String> therapist) { // try-with-resources会自动关闭流和Workbook try (FileInputStream file = new FileInputStream("Schedule.xlsx"); XSSFWorkbook workbook = new XSSFWorkbook(file)) { sheet = workbook.getSheetAt(0); // 额外判断:如果第一个sheet不存在,就创建一个新的 if (sheet == null) { sheet = workbook.createSheet(); } // 写入护士数据到第0列,行从1开始 for (int i=0;i<nurses.size();i++) { writeToCell(i+1, 0, nurses.get(i)); } // 写入治疗师数据到第1列,行从1开始(根据你的需求调整列号) for (int i=0;i<therapist.size();i++) { writeToCell(i+1, 1, therapist.get(i)); } // 关键!把修改后的Workbook写回文件 try (FileOutputStream outputStream = new FileOutputStream("Schedule.xlsx")) { workbook.write(outputStream); } } catch (IOException e) { e.printStackTrace(); // 这里可以添加自定义的异常处理,比如提示用户文件操作失败 } } // 把上面的writeToCell方法放在这里 private void writeToCell(int rowNum, int colNum, String value) { XSSFRow row = sheet.getRow(rowNum); if (row == null) { row = sheet.createRow(rowNum); } XSSFCell cell = row.getCell(colNum); if (cell == null) { cell = row.createCell(colNum); } cell.setCellValue(value); } }
3. 额外注意事项
- 确保
Schedule.xlsx的路径是正确的,如果是相对路径,要确认程序运行的工作目录下存在这个文件 - 如果你的Excel是
.xls格式(旧版本),需要替换XSSFWorkbook为HSSFWorkbook,XSSFSheet为HSSFSheet,以此类推
内容的提问来源于stack exchange,提问作者Dim
相关产品推荐
相关产品推荐

