I'm using Apache POI 3.17 to read an Excel 2013 workbook. The workbook is created and edited by users directly in Excel. I then run a Java 8 program that uses POI to read and process the workbook.
Some cells are color-coded and so I need to obtain the fill color. In many cases this works fine, but there are a set of grey/silver colors where it does not work and I'm unsure as to why.
As an example, the Excel cells look like this:
My code for obtaining the fill color is:
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;
}
The results of this when called for each of the example Excel cells above are:
Cell=BBH52 Pink indexFore=0 indexBack=64 colorFore=FFF79646 colorBack=null
Cell=BBH53 No fill indexFore=64 indexBack=64 colorFore=Null colorBack=Null
Cell=BBH54 Grey 1 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH55 Grey 2 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH56 Grey 3 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH57 Grey 4 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH58 Grey 5 indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Cell=BBH59 White indexFore=0 indexBack=64 colorFore=FFFFFFFF colorBack=null
Any idea why the shades of Grey and White all translate to a Hex value of FFFFFFFF? Is there a more correct method to access the actual fill color? Thanks.