为HSSFCellStyle设置前景色始终为黑色

Asc*_*ian 45 java poi-hssf apache-poi

我正在使用POI在Java中创建Excel电子表格.我有以下代码用于创建标题行:

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);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,无论我选择什么颜色,在单元格上设置填充背景颜色总是黑色.我究竟做错了什么?如果我不使用"setFillPattern"行,则根本不显示任何颜色.

Asc*_*ian 74

我得到了这个工作.我必须设置前景色才能使背景颜色有效(??).

所以我改变了:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
Run Code Online (Sandbox Code Playgroud)

至:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
Run Code Online (Sandbox Code Playgroud)

它工作了!

  • 啊,我明白了.我需要改变前景色来改变背景色 - 天才! (7认同)
  • 我认为单元格涂有一个由前景像素和背景像素组成的图案.如果使用SOLID_FOREGROUND,则只显示前景像素.此颜色与用于渲染文本的颜色不同,后者使用字体设置. (4认同)
  • 保存了几个小时的绝望,¿有人知道为什么这样工作吗? (2认同)
  • 在Apache POI版本> 4的情况下,您现在必须使用以下代码:`HSSFColor.HSSFColorPredefined.GREY_25_PERCENT.getIndex()`。 (2认同)

diz*_*zzy 10

如果要设置前景色,请使用

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Run Code Online (Sandbox Code Playgroud)

如果要设置背景颜色,请使用

style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG);
Run Code Online (Sandbox Code Playgroud)

要么

style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG);
Run Code Online (Sandbox Code Playgroud)

如果在背景填充图案之前设置前景填充图案,则前景色和背景色似乎是"堆叠"(红色+蓝色=紫色),而不是相反.您可以选择其他几种填充模式.请注意,如果不更改默认填充图案,则不会应用颜色.

CellStyle.SOLID_FOREGROUND在3.15+版本中已弃用.请FillPatternType.SOLID_FOREGROUND改用.