web-dev-qa-db-ja.com

HSSFCellStyleの前景色の設定は常に黒になります

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」行を使用しない場合、色がまったく表示されません。

44
Ascalonian

これが機能するようになりました。背景色を機能させるには、前景色を設定する必要がありました(??)。

だから私は変更しました:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);

に:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);

そしてそれは働いた!

72
Ascalonian

前景色を設定している場合は、

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代わりに。

8
dizzy