Установка цвета переднего плана для HSSFCellStyle всегда выходит черным - PullRequest
41 голосов
/ 10 мая 2010

Я использую POI для создания электронной таблицы Excel на Java. У меня есть следующий код, используемый для создания строки заголовка:

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Report");

// some more code

HSSFRow row = sheet.createRow(0);

HSSFCell cell = row.createCell(cellNumber);
HSSFCellStyle cellStyle = wb.createCellStyle();

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setColor(HSSFColor.WHITE.index);

cellStyle.setFont(font);
cell.setCellStyle(cellStyle);

Проблема, с которой я столкнулся, заключается в том, что установка цвета фона заливки для ячейки всегда получается черной, независимо от того, какой цвет я выберу. Что я делаю неправильно? Если я не использую строку "setFillPattern", цвет не отображается вообще.

Ответы [ 2 ]

70 голосов
/ 10 мая 2010

Я получил это на работу. Мне пришлось установить цвет переднего плана, чтобы фоновый цвет работал (??).

Итак, я изменил:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);

до:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);

и это сработало!

6 голосов
/ 02 февраля 2017

Если вы устанавливаете цвет переднего плана, используйте

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

Если вы устанавливаете цвет фона, используйте

style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG);

или

style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG);

Цвета переднего плана и фона кажутся «стекающимися» (красный + синий = фиолетовый), если вы устанавливаете шаблон заливки переднего плана перед шаблоном заливки фона, но не наоборот. Есть несколько других шаблонов заливки, которые вы можете выбрать. Обратите внимание, что цвет не будет применяться, если вы не измените шаблон заливки по умолчанию.

CellStyle.SOLID_FOREGROUND устарела в версии 3.15+. Вместо этого используйте FillPatternType.SOLID_FOREGROUND.

...