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

Apache POI Java判断Excel单元格红绿蓝填充色代码不生效问题

问题根因

  • 混淆了填充色取值方法:Apache POI 中单元格的纯色填充使用的是填充前景色,getFillBackgroundColor() 实际获取的是填充图案的背景色,默认纯色填充场景下该值永远为默认值,不会返回你设置的单元格填充色。
  • 单元格索引计数错误:Excel 单元格索引从0开始计数,你要取第11个单元格,对应索引是10,当前代码写的11实际取的是第12个单元格,若该单元格为空会直接触发空指针异常。
  • 缺少空值防护:如果对应行没有目标位置的单元格,row.getCell() 会返回null,直接调用方法会直接报错。
  • 颜色索引适配问题:如果你的Excel是.xlsx格式,且使用了非预设的自定义颜色,直接比对索引值会失效,需要额外适配RGB值比对逻辑。

修正后可运行代码

// 预设颜色索引(使用自定义RGB色可替换为下方RGB比对逻辑)
short blueColorIndex = 64;
short redColorIndex = 0; // 自行替换为实际对应颜色索引
short yellowColorIndex = 0; // 自行替换为实际对应颜色索引

// 取第11个单元格(索引为10),空单元格自动兜底避免空指针
Cell cell = row.getCell(10, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
// 取填充前景色(即单元格实际显示的填充色)
short cellColorIndex = cell.getCellStyle().getFillForegroundColor();

if (cellColorIndex == blueColorIndex) {
    System.out.println("执行操作1");
} else if (cellColorIndex == yellowColorIndex) {
    System.out.println("执行操作2");
} else if (cellColorIndex == redColorIndex) {
    System.out.println("执行操作3");
}

自定义RGB颜色适配方案

如果你使用的是自定义颜色而非Excel预设索引色,可以用以下逻辑获取实际RGB值比对:

CellStyle style = cell.getCellStyle();
Color color = style.getFillForegroundColorColor();
byte[] rgb = color.getRGB();
// 示例:比对蓝色RGB值(0,0,255)
if (rgb[0] == 0 && rgb[1] == 0 && rgb[2] == (byte)255) {
    // 执行蓝色对应操作
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:54:06