2010-05-10 608 views
38

我正在使用POI在Java中創建Excel電子表格。我有用於創建標題行下面的代碼:設置HSSFCellStyle的前景色始終爲黑色

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」行,則根本不顯示任何顏色。

回答

64

我得到了這個工作。我必須設置前景色才能使背景色起作用(??)。

因此,我改變:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 

到:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 

和它的工作!

+5

啊,我明白了。我需要改變前景色來改變背景色 - 天才! – Pakman 2012-10-18 21:10:24

+2

保存了許多小時的絕望,¿是否有人知道爲什麼這樣工作? – CGK 2013-10-29 14:43:02

+4

我認爲這個單元格是由前景和背景像素組成的圖案。如果您使用SOLID_FOREGROUND,則只有前景像素可見。該顏色與用於呈現文字的顏色不同,後者是用字體設置的。 – Axel 2014-02-20 12:48:38

5

如果要設置前景色,使用

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

+0

關於'style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex())的一個很好的解釋。 \t \t \t style.setFillPattern(FillPatternType.SOLID_FOREGROUND);'幫助我,謝謝+1): - – Yash 2017-11-09 08:19:14

相關問題