Я использую Apache POI 3.17 для чтения книги Excel 2013.Рабочая книга создается и редактируется пользователями непосредственно в Excel.Затем я запускаю программу на Java 8, которая использует POI для чтения и обработки книги.
Некоторые ячейки имеют цветовую кодировку, поэтому мне нужно получить цвет заливки.Во многих случаях это работает нормально, но есть набор серых / серебряных цветов, где он не работает, и я не уверен, почему.
Например, ячейки 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выше:
Ячейка = BBH52 Розовый indexFore = 0 indexBack = 64 colorFore = FFF79646 colorBack = ноль
Ячейка = BBH53 Нет заполнения indexFore = 64 indexBack = 64 colorFore = Null colorBack =Null
Ячейка = BBH54 Серый 1 indexFore = 0 indexBack = 64 colorFore = FFFFFFFF colorBack = null
Ячейка = BBH55 Grey 2 indexFore = 0 indexBack = 64 colorFore = FFFFFFFF colorBack = null
Ячейка = BBH56 Серый 3 indexFore = 0 indexBack = 64 colorFore = FFFFFFFF colorBack = null
Ячейка = BBH57 Grey 4 indexFore = 0 indexBack = 64 colorFore = FFFFFFFF colorBack = null
Ячейка= BBH58 Серый 5 indexFore = 0 indexBack = 64 colorFore = FFFFFFFF colorBack = ноль
Cell = BBH59 White indexFore = 0 indexBack = 64 colorFore = FFFFFFFF colorBack = null
Есть идеи, почему все оттенки серого и белого переводятся в шестнадцатеричное значение FFFFFFFF?Есть ли более правильный способ доступа к фактическому цвету заливки?Спасибо.