2010-05-10 29 views
38

Tôi đang sử dụng POI để tạo bảng tính Excel bằng Java. Tôi có mã sau được sử dụng để tạo hàng tiêu đề:Đặt màu nền trước cho HSSFCellStyle luôn xuất hiện màu đen

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); 

Vấn đề tôi đang gặp là việc đặt màu nền trên ô luôn luôn xuất hiện màu đen, bất kể màu nào tôi chọn. Tôi đang làm gì sai? Nếu tôi không sử dụng dòng "setFillPattern", không có màu nào hiển thị.

Trả lời

64

Tôi đã làm việc này. Tôi đã phải thiết lập màu nền trước để làm cho màu nền hoạt động (??).

Vì vậy, tôi đã thay đổi:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 

tới:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 

và nó làm việc!

+5

Ahh, tôi hiểu rồi. Tôi cần thay đổi màu nền trước để thay đổi màu nền - thiên tài! – Pakman

+2

Đã lưu nhiều giờ tuyệt vọng, ¿có ai biết tại sao điều này hoạt động theo cách này không? – CGK

+4

Tôi nghĩ rằng các tế bào được vẽ với một mô hình bao gồm tiền cảnh và nền pixel. Nếu bạn sử dụng SOLID_FOREGROUND, chỉ có điểm ảnh tiền cảnh có thể nhìn thấy được. Màu này khác với màu được sử dụng để hiển thị văn bản, được đặt bằng phông chữ. – Axel

5

Nếu bạn đang thiết lập màu foreground, sử dụng

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

Nếu bạn đang thiết lập màu nền, sử dụng

style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG); 

hoặc

style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG); 

Các màu foreground và background vẻ để 'ngăn xếp' (đỏ + xanh = tím) nếu bạn đặt mẫu tô nền trước trước khi điền vào nền ern, nhưng không phải là cách khác. Có một số mẫu điền khác mà bạn có thể chọn. Lưu ý rằng màu sắc sẽ không được áp dụng nếu bạn không thay đổi mẫu điền mặc định.

CellStyle.SOLID_FOREGROUND không còn được dùng trong phiên bản 3.15+. Sử dụng FillPatternType.SOLID_FOREGROUND để thay thế.

+0

Giải thích tốt về 'style.setFillForegroundColor (IndexedColors.GREY_25_PERCENT.getIndex()); \t \t \t style.setFillPattern (FillPatternType.SOLID_FOREGROUND); 'đã giúp tôi, Cảm ơn +1): - – Yash

Các vấn đề liên quan