2013-02-28 79 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(); 
} 
相关问题