使用Java检索Excel指定行中含“x”单元格对应的列名方法咨询
代码调整方案
原代码存在以下可优化点:
- 字符串比较逻辑错误:Java中对比字符串内容需使用
equals()方法,==对比的是对象内存地址,会导致匹配失效 - 空单元格未做兼容:如果遍历到的单元格为空,直接调用
getStringCellValue()会抛出类型异常 - 循环逻辑完全无效:内层
for (int firstRow = 0; firstRow < 0; firstRow++)循环条件永远不成立,不会执行任何逻辑,且不需要嵌套多层循环,匹配到"x"后直接用当前列索引取表头值即可 - 性能冗余:循环内重复调用
CellUtil.getRow()获取同一行对象,完全没必要
修正后可直接运行的代码:
// 按需调整以下参数即可 int targetRowIndex = 3; // 目标行索引,POI行号从0开始计数,示例中的row3对应索引3 int startColumn = 2; // 遍历起始列索引,示例中从column2开始对应索引2 int endColumn = 5; // 遍历结束列索引,示例中到column5结束对应索引5 int headerRowIndex = 0; // 表头所在行索引,默认第一行是表头 // 提前获取目标行和表头行,避免循环内重复调用 Row targetRow = CellUtil.getRow(targetRowIndex, sheet); Row headerRow = CellUtil.getRow(headerRowIndex, sheet); // 遍历指定列范围 for (int columnIndex = startColumn; columnIndex <= endColumn; columnIndex++) { Cell cell = CellUtil.getCell(targetRow, columnIndex); // 兼容空单元格,安全获取内容 String cellValue = ""; if (cell != null) { // 统一转成字符串类型,避免数值类型单元格报错 cell.setCellType(CellType.STRING); cellValue = cell.getStringCellValue().trim(); } // 匹配值为x的单元格 if ("x".equals(cellValue)) { // 直接用当前列索引获取对应列名 Cell headerCell = CellUtil.getCell(headerRow, columnIndex); String columnName = headerCell.getStringCellValue().trim(); System.out.print(columnName + " "); } } // 输出完成后换行 System.out.println();
注意事项:
- 如果你用的是低版本POI,把
cell.setCellType(CellType.STRING)替换为cell.setCellType(Cell.CELL_TYPE_STRING)即可 - 如果你要使用原代码的查询第15行、遍历9到33列的逻辑,把对应参数修改为
targetRowIndex=15、startColumn=9、endColumn=32即可
内容的提问来源于stack exchange,提问作者MRL
相关产品推荐
相关产品推荐

