如何读取Excel指定行与列的数据?Java代码实现求助
解决Excel指定行+特定列读取问题
我来帮你搞定这个Excel读取的问题!你要从指定行开始读取数据,并且只提取特定列的值,用Apache POI的话可以按照下面的思路调整你的代码:
核心思路
- 明确起始行号:注意Apache POI中行索引是从0开始计数的,如果你要从第5行开始读,对应的索引就是4
- 定义目标列集合:比如你要取第2列和第4列,对应的索引就是1和3(同样列也是0起始)
- 遍历起始行之后的每一行,跳过空行,只提取目标列的单元格值
修正后的完整代码
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFCell; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; import java.util.List; public class ReadExcel { private File src = new File("F:\\ucd\\UAT_Patch_31012018.xlsx"); public void readExcelFromSpecifiedRowAndColumns() throws IOException { // 使用try-with-resources自动关闭流,避免资源泄漏 try (FileInputStream fis = new FileInputStream(src); XSSFWorkbook wb = new XSSFWorkbook(fis)) { XSSFSheet sheet1 = wb.getSheetAt(0); if (sheet1 == null) { System.out.println("指定工作表不存在!"); return; } // 1. 设置起始行号(比如从第3行开始读,索引为2) int startRowIndex = 2; // 2. 设置需要读取的特定列索引(比如第1列和第3列,索引为0和2) List<Integer> targetColumnIndices = Arrays.asList(0, 2); // 遍历从起始行到最后一行 for (int rowNum = startRowIndex; rowNum <= sheet1.getLastRowNum(); rowNum++) { XSSFRow row = sheet1.getRow(rowNum); if (row == null) { // 跳过空行 continue; } System.out.println("第" + (rowNum + 1) + "行数据:"); // 遍历目标列,提取单元格值 for (int colIndex : targetColumnIndices) { XSSFCell cell = row.getCell(colIndex); String cellValue = getCellValue(cell); System.out.println("列" + (colIndex + 1) + "的值:" + cellValue); } System.out.println("------------------------"); } } } // 统一处理不同类型的单元格值 private String getCellValue(XSSFCell cell) { if (cell == null) { return ""; } switch (cell.getCellType()) { case STRING: return cell.getStringCellValue(); case NUMERIC: // 如果是数字类型,转成字符串避免科学计数法 return String.valueOf(cell.getNumericCellValue()); case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: // 可以根据需求处理公式结果 return cell.getCellFormula(); default: return ""; } } public static void main(String[] args) { ReadExcel reader = new ReadExcel(); try { reader.readExcelFromSpecifiedRowAndColumns(); } catch (IOException e) { e.printStackTrace(); } } }
关键注意点
- 索引计数问题:POI的行和列都是从0开始的,一定要对应好你实际要读取的行号和列号
- 空行/空单元格处理:必须判断行和单元格是否为空,否则容易抛出
NullPointerException - 单元格类型兼容:不同类型的单元格(字符串、数字、布尔值等)要统一处理,避免读取异常
- 资源管理:使用
try-with-resources语法自动关闭输入流和Workbook,防止资源泄漏
内容的提问来源于stack exchange,提问作者vivek bangare




