当有颜色时,XSSFColor.getRgb()返回null

时间:2013-02-28 18:28:27

标签: java xlsx

我正在使用poi.apache读取xslx工作簿,我想获取单元格的rgb颜色代码。当我尝试将rgb代码形成XSSFColor时,即使我知道那里有颜色,它也会返回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 个答案:

答案 0 :(得分:2)

我不知道为什么会这样,但你想要的是填充前景,而不是填充背景

替换:

XSSFColor col = ce.getFillBackgroundXSSFColor();

使用:

XSSFColor col = ce.getFillForegroundXSSFColor();

我使用Excel 2010进行测试,这可以按预期方式报告“背景”颜色。尽管措辞似乎表明它报告了文本颜色,但实际上是使用 org.apache.poi.ss.usermodel.Font 的颜色属性来控制。

答案 1 :(得分:0)

  

现在的问题是,当我的颜色为“深灰色”时,我变黑(FF000000),当浅灰色时,我变为白色(FFFFFFFF)。有没有办法获得更具体的颜色代码?

我找到了解决方法:

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