首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java POI/JXL 讀取 Excel 指定單元格而非全量遍歷

     編輯:程式設計疑難解答

需求背景

現有代碼使用 POI 遍歷讀取整個 Excel 表格,返回 String[][] 二維數組。需修改為僅讀取指定行列的單元格值,提升性能並簡化邏輯。

原代碼核心邏輯

public static String[][] getData(File file, int ignoreRows) {
    List<String[]> result = new ArrayList<>();
    // ... 打開工作簿 ...
    for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
        HSSFSheet st = wb.getSheetAt(sheetIndex);
        for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
            HSSFRow row = st.getRow(rowIndex);
            // ... 遍歷該行所有列 ...
            result.add(values);
        }
    }
    // 轉換為 String[][]
}

修改建議

直接定位單元格坐標,避免雙重循環:

public static String getCellValue(File file, int sheetIndex, int rowIndex, int colIndex) 
        throws IOException {
    try (FileInputStream fis = new FileInputStream(file);
         HSSFWorkbook wb = new HSSFWorkbook(fis)) {
        
        HSSFSheet sheet = wb.getSheetAt(sheetIndex);
        HSSFRow row = sheet.getRow(rowIndex);
        if (row == null) return null;
        
        HSSFCell cell = row.getCell(colIndex);
        if (cell == null) return "";
        
        // 根據類型提取值
        switch (cell.getCellTypeEnum()) {
            case STRING: return cell.getStringCellValue();
            case NUMERIC: 
                if (DateUtil.isCellDateFormatted(cell)) 
                    return new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
                return new DecimalFormat("0.##").format(cell.getNumericCellValue());
            case BOOLEAN: return String.valueOf(cell.getBooleanCellValue());
            case FORMULA: return cell.getCellFormula();
            default: return "";
        }
    }
}

調用示例

// 讀取第 0 個 Sheet,第 5 行(索引 4),第 3 列(索引 2)
String value = getCellValue(file, 0, 4, 2);
System.out.println("指定單元格值: " + value);

參考資源

更多 POI 單元格操作技巧請參考:POI 讀寫 Excel 詳解

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved