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

如何在Java中获取Excel列值?Apache POI 4读取每行第14列值到字符串变量

嘿,我来帮你搞定这两个Excel读取的问题!

如何在Java中获取Excel的列值?

在Java里操作Excel,最常用的工具就是Apache POI库,它支持旧版.xls(HSSF API)和新版.xlsx(XSSF API)格式。获取列值的核心流程是这样的:

  • 加载Excel文件,创建对应的Workbook对象(HSSFWorkbook对应xls,XSSFWorkbook对应xlsx)
  • 从Workbook中获取目标Sheet
  • 遍历Sheet中的行(Row)
  • 对每一行,定位到目标列的Cell对象
  • 根据单元格的类型(字符串、数字、日期、公式等),将Cell的值转换为你需要的格式(比如字符串)
在Apache POI 4中读取每行第14列的值

先给你指出现有代码的几个问题:

  1. POI的列索引是从0开始计数的,所以第14列对应的索引是13,不是14,这很容易踩坑!
  2. 你现在遍历了每行的所有单元格,效率很低——其实可以直接定位到目标列的单元格,不用遍历所有单元格
  3. 直接调用getStringValue()会有类型转换风险:如果单元格是数字、日期或公式类型,会抛出IllegalStateException,必须先判断单元格类型

下面是修正后的完整代码,附带详细注释:

// 假设你已经正确加载了Workbook和Sheet,rows是Sheet的行迭代器
while (rows.hasNext()) { 
    Row currentRow = rows.next(); 

    // 获取第14列(索引13)的单元格,使用MissingCellPolicy避免单元格不存在时抛出异常
    // RETURN_NULL_AND_BLANK表示:如果单元格不存在返回null,如果是空单元格返回空白Cell
    Cell targetCell = currentRow.getCell(13, Row.MissingCellPolicy.RETURN_NULL_AND_BLANK);
    String column14Value = ""; // 初始化默认值

    if (targetCell != null) {
        // 根据单元格类型处理值,避免类型转换异常
        switch(targetCell.getCellType()) {
            case STRING:
                column14Value = targetCell.getStringCellValue();
                break;
            case NUMERIC:
                // 区分数字和日期类型
                if (DateUtil.isCellDateFormatted(targetCell)) {
                    // 如果是日期格式,转换为字符串(你可以自定义日期格式)
                    column14Value = targetCell.getDateCellValue().toString();
                } else {
                    // 如果是普通数字,转字符串
                    column14Value = String.valueOf(targetCell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                column14Value = String.valueOf(targetCell.getBooleanCellValue());
                break;
            case FORMULA:
                // 处理公式单元格:需要计算公式结果
                FormulaEvaluator evaluator = currentRow.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
                CellValue formulaResult = evaluator.evaluate(targetCell);
                // 根据公式结果的类型处理,这里统一转字符串
                column14Value = formulaResult.getStringValue();
                break;
            case BLANK:
                column14Value = "";
                break;
            default:
                column14Value = "无法识别的单元格类型";
        }
    }

    // 现在column14Value就是每行第14列的值了,你可以用它做后续操作
    System.out.println("当前行第14列的值:" + column14Value);
}

几个关键要点:

  • 索引问题:一定要记住POI的列/行索引都是0-based,第1列是索引0,第14列就是索引13
  • 单元格空值处理:使用MissingCellPolicy可以避免因为单元格不存在而抛出的异常,让代码更健壮
  • 类型安全:必须根据单元格的实际类型转换值,否则会出现运行时异常,尤其是数字和字符串类型的混合场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:47:53