Apache POI возвращает null для ячейки.getCellStyle().getFillForegroundColorColor() при использовании условного форматирования

#java #excel #colors #apache-poi

#java #excel #Цвет #apache-poi

Вопрос:

Я пытаюсь считывать цвет ячеек, которые были установлены в Excel с использованием условного форматирования. В большинстве случаев это не работает, и возвращаемый цвет равен null. Это относится как к цвету переднего плана, так и к цвету фона. В очень немногих случаях цвет считывается правильно, но все еще неясно, почему.

 XSSFColor color = (XSSFColor)cell.getCellStyle().getFillForegroundColorColor();
  

Здесь вы найдете файл Excel для воспроизведения моего случая:
https://docs.google.com/spreadsheets/d/1_oge-F-_yzcswyDtrg5f-T9as733YmMxX0Rs6gmt4Is/edit?usp=sharing

Версия Apache POI: 4.0.1

ОБНОВЛЕНИЕ: Это может быть связано с условным форматированием, потому что, когда я устанавливаю фон для одной ячейки вручную, он работает нормально.

Комментарии:

1. Цвет фона ячейки DisplayFormat отличается от цвета стиля ячейки при использовании условного форматирования. Но для получения DisplayFormat необходимо следующее: 1. Проверьте, является ли ячейка частью диапазона ячеек, который имеет условный формат (возможно). 2. Если это так, проверьте, действительно ли ячейка соответствует одному из правил условного форматирования (возможно, но с очень большими усилиями). 3. Если это так, проверьте, имеет ли правило форматирование по шаблону (возможно). Если это так, получите цвет фона из этого шаблона форматирования (возможно).

2. Поэтому наиболее сложным является 2. , по крайней мере, если это должно стать универсальным решением. И если это не должно стать универсальным решением, то проверка содержимого ячейки и определение дальнейших параметров по содержимому этой ячейки, а не по цвету, намного проще. В вашем случае: все ячейки в $A$1:$BI$19 , содержащие «RUH», окрашены в синий цвет. Итак, выполните цикл по всем ячейкам в $A$1:$BI$19 и проверьте, является ли значение строковой ячейки «RUH».

3. @AxelRichter хорошо, спасибо. Таким образом, в основном единственный способ — использовать применяемое условное форматирование