XSSFColor.getRgb() возвращает значение null при наличии цвета

Я читаю книгу xslx, используя poi.apache, и хочу получить цветовой код rgb для ячеек. Когда я пытаюсь получить код rgb из XSSFColor, он возвращает ноль, хотя я знаю, что там есть цвет.

for(int k = 0; k < r.getLastCellNum(); k++) {
    XSSFCellStyle ce = (XSSFCellStyle) r.getCell(k, Row.RETURN_NULL_AND_BLANK).getCellStyle();
    XSSFColor col = ce.getFillBackgroundXSSFColor();
    byte[] rgb = col.getARgb(); //null
}

Получение внутреннего объекта CTColor тоже не помогает. Он также возвращает ноль.

 byte[] ctRgb = col.getCTColor().getRgb(); // null

Кто-нибудь еще столкнулся с этой проблемой и / или есть решение?

Изменить

как указал Creakazoid, переключение фона и переднего плана решило много моих проблем. Но теперь проблема, которую я получаю, связана с градиентами серого.

Например, темно-серый возвращается как черный (FF000000), а светло-серый возвращается как белый (FFFFFFFF). Могу ли я получить фактический код серого цвета?


person Aboutblank    schedule 28.02.2013    source источник


Ответы (2)


Я не знаю, почему это так, но вам нужна заливка переднего плана, а не заливка фона.

Заменять:

XSSFColor col = ce.getFillBackgroundXSSFColor();

С:

XSSFColor col = ce.getFillForegroundXSSFColor();

Я тестировал с Excel 2010, и это работает, как и ожидалось, чтобы сообщить о «фоновом» цвете. Хотя может показаться, что формулировка указывает на то, что она сообщает о цвете текста, на самом деле он управляется с помощью свойства цвета org.apache.poi.ss.usermodel.Font.

person Creakazoid    schedule 28.02.2013
comment
Спасибо за ваш ответ. Это решило около 90% моих проблем, и это здорово. Теперь проблема в том, что я получаю черный (FF000000), когда мой цвет темно-серый, и белый (FFFFFFFF), когда он светло-серый. Есть ли способ получить более конкретный код цвета? - person Aboutblank; 01.03.2013

Теперь проблема в том, что я получаю черный (FF000000), когда мой цвет «темно-серый», и белый (FFFFFFFF), когда он светло-серый. Есть ли способ получить более конкретный код цвета?

Я нашел обходной путь:

XSSFColor color = ce.getFillForegroundXSSFColor();
byte[] rgb = color.getRgbWithTint();
if (rgb == null) {
     rgb = color.getRgb();
}
person Tim    schedule 29.04.2015