设置 HSSFCellStyle 的前景色总是显示为黑色。

51

我正在使用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);

我遇到的问题是,无论我选择什么颜色,设置单元格背景填充颜色总是显示为黑色。我做错了什么?如果我不使用"setFillPattern"行,根本就没有颜色显示。

3个回答

83

我已经让它运作起来了。我必须设置前景颜色才能使背景颜色生效(??)

所以我改变了:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);

至:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);

它起作用了!


12
啊,我明白了。我需要改变前景色来改变背景色——太聪明了! - Pakman
4
我认为该单元格被涂上了由前景和背景像素组成的图案。如果使用SOLID_FOREGROUND,只有前景像素是可见的。这种颜色与用于呈现文本的颜色不同,后者是由字体设置的。 - Axel
谢谢Axel!!注意:这两个实现的Javadoc非常清楚,https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html#setFillBackgroundColor(short)https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCellStyle.html#setFillBackgroundColor(short)不幸的是,基类对此没有任何说明 https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellStyle.html#setFillBackgroundColor(short) - jgraglia
2
使用 Apache POI 版本 > 4,您现在需要使用以下代码:HSSFColor.HSSFColorPredefined.GREY_25_PERCENT.getIndex() - Yann39

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

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


一个关于 style.setFillForegroundColor( IndexedColors.GREY_25_PERCENT.getIndex() ); style.setFillPattern( FillPatternType.SOLID_FOREGROUND ); 的好解释,帮助了我,谢谢 +1 ):- - Yash

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接