2013-02-28 118 views
0

我正在使用poi.apache讀取xslx工作簿,並且想要獲取單元格的RGB顏色代碼。當我試圖讓rgb代碼形成一個XSSFColor時,即使我知道那裏有顏色,它也會返回null。當出現顏色時,XSSFColor.getRgb()返回null

for(int k = 0; k < r.getLastCellNum(); k++) { 
    XSSFCellStyle ce = (XSSFCellStyle) r.getCell(k, Row.RETURN_NULL_AND_BLANK).getCellStyle(); 
    XSSFColor col = ce.getFillBackgroundXSSFColor(); 
    byte[] rgb = col.getARgb(); //null 
} 

獲取內部CTColor對象也沒有幫助。它也返回null。

byte[] ctRgb = col.getCTColor().getRgb(); // null 

是否有其他人遇到此問題和/或有解決方案?

編輯

爲Creakazoid指出,切換背景和前景固定我的很多問題。但是現在我得到的問題是灰度梯度。

例如,深灰色返回爲黑色(FF000000),淺灰色返回爲白色(FFFFFFFF)。我可以得到真正的灰色代碼嗎?

回答

2

我不知道這是爲什麼事情是這樣的,但你想要的是填充前景,不填充背景

替換:

XSSFColor col = ce.getFillBackgroundXSSFColor(); 

有了:

XSSFColor col = ce.getFillForegroundXSSFColor(); 

我用Excel 2010進行測試,這按預期工作報告 「背景」 的顏色。儘管措辭似乎表明它報告了文本顏色,但實際上它使用org.apache.poi.ss.usermodel.Font的顏色屬性進行控制。

+0

謝謝您的答覆。這確實解決了我90%的問題,這很好。現在的問題是,當我的顏色爲「深灰色」時,我變黑(FF000000),而淺灰色時變爲白色(FFFFFFFF)。有沒有辦法獲得更具體的顏色代碼? – Aboutblank 2013-02-28 20:39:18

0

現在的問題是,當我的顏色是「深灰色」和白色(FFFFFFFF)時,我變黑(FF000000),當它的淺灰色。有沒有辦法獲得更具體的顏色代碼?

我已經找到了解決辦法:

XSSFColor color = ce.getFillForegroundXSSFColor(); 
byte[] rgb = color.getRgbWithTint(); 
if (rgb == null) { 
    rgb = color.getRgb(); 
} 
相關問題