如何获取Excel合并单元格值?获取List Price Total合并值返回空求助
搞定Excel合并单元格取值返回null的问题
嘿,我来帮你解决这个困扰!首先得明确Apache POI处理合并单元格的核心逻辑:合并单元格的真实值只会存在于合并区域的左上角单元格(也就是你定义的mergedCell的getFirstRow()和getFirstColumn()对应的那个单元格),合并范围内的其他单元格都是空的,直接读肯定会返回null。
看你写的代码片段,问题大概率出在循环逻辑上——你没必要遍历整个合并区域,直接定位到那个存值的左上角单元格就行啦!
正确的代码写法
直接获取合并区域的第一个单元格,再处理它的值:
CellRangeAddress mergedCell = new CellRangeAddress(12, 17, 9, 9); // 对应第13-18行、第10列 // 先拿到合并区域的第一行(值存在这里) Row firstRow = sheet.getRow(mergedCell.getFirstRow()); String mergedValue = null; if (firstRow != null) { Cell valueCell = firstRow.getCell(mergedCell.getFirstColumn()); if (valueCell != null) { // 根据单元格类型转换值,避免类型不匹配报错 switch (valueCell.getCellType()) { case STRING: mergedValue = valueCell.getStringCellValue(); break; case NUMERIC: mergedValue = String.valueOf(valueCell.getNumericCellValue()); break; case BOOLEAN: mergedValue = String.valueOf(valueCell.getBooleanCellValue()); break; case FORMULA: // 如果是公式单元格,需要用公式求值器计算结果 FormulaEvaluator evaluator = sheet.getWorkbook().getCreationHelper().createFormulaEvaluator(); mergedValue = evaluator.evaluate(valueCell).getStringValue(); break; default: mergedValue = valueCell.toString(); } } } System.out.println("合并单元格的内容:" + mergedValue);
为啥你之前的代码返回null?
你写的循环是for (int rowCounter = rowNum; rowCounter < lastRow; rowCounter++),也就是从第12行循环到第16行(因为lastRow是17,rowCounter < 17)。就算你循环到了第12行,如果没处理行或单元格为空的情况,也可能拿不到值;而且本质上完全不需要遍历,合并值只在第一个单元格里,多此一举啦~
另外要注意:如果Excel里对应的行被删除过,sheet.getRow(mergedCell.getFirstRow())会返回null,所以一定要先判断行和单元格是否存在,避免空指针报错哦!
内容的提问来源于stack exchange,提问作者user3662369
相关产品推荐
相关产品推荐

