【发布时间】:2019-01-31 18:56:11
【问题描述】:
我正在使用 Apache POI 3.17 来阅读 Excel 2013 工作簿。工作簿由用户直接在 Excel 中创建和编辑。然后我运行一个使用 POI 读取和处理工作簿的 Java 8 程序。
有些单元格是用颜色编码的,所以我需要获取填充颜色。在许多情况下,这可以正常工作,但有一组灰色/银色不起作用,我不确定为什么。
例如,Excel 单元格如下所示:
我获取填充颜色的代码是:
private String getFillColor(XSSFCell cell) {
String fColorString = "None";
if (cell != null) {
XSSFCellStyle cellStyle = cell.getCellStyle();
short sColorFore = cellStyle.getFillForegroundColor();
short sColorBack = cellStyle.getFillBackgroundColor();
XSSFColor xColorFore = cellStyle.getFillForegroundColorColor();
XSSFColor xColorBack = cellStyle.getFillBackgroundColorColor();
String s = "";
s += " indexFore=" + sColorFore;
s += " indexBack=" + sColorBack;
s += " colorFore=" + ((xColorFore == null) ? "Null" : xColorFore.getARGBHex());
s += " colorBack=" + ((xColorBack == null) ? "Null" : xColorBack.getARGBHex());
System.out.println("Cell=" + cell.getAddress() + " " + cell.getStringCellValue() + s);
if (xColorFore != null) {
fColorString = xColorFore.getARGBHex();
}8
}
return fColorString;
}
对上面的每个示例 Excel 单元格调用时,结果如下:
Cell=BBH52 粉色 indexFore=0 indexBack=64 colorFore=FFF79646 colorBack=null
Cell=BBH53 无填充 indexFore=64 indexBack=64 colorFore=Null colorBack=Null
Cell=BBH54 灰色 1 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH55 灰色 2 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH56 灰色 3 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH57 灰色 4 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH58 灰色 5 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH59 白色 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
知道为什么灰色和白色的阴影都转换为 FFFFFFFF 的十六进制值吗?是否有更正确的方法来访问实际的填充颜色?谢谢。
【问题讨论】:
标签: java excel apache-poi