Установка цвета переднего плана для HSSFCellStyle всегда выходит черным

Я использую 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 ответа

Решение

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

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

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);

чтобы:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);

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

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

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 вместо.

Cs Header.setFillForegroundColor(HSSFColor.SKY_BLUE.index); csHeader.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

Другие вопросы по тегам