0

我正在使用 poi.apache 阅读 xslx 工作簿,我想获取单元格的 rgb 颜色代码。当我尝试从 XSSFColor 中获取 rgb 代码时,即使我知道那里有颜色,它也会返回 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 对象也无济于事。它也返回空值。

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

有没有其他人遇到过这个问题和/或有解决方案?

编辑

正如 Creakazoid 指出的那样,切换背景和前景解决了我的很多问题。但现在我遇到的问题是灰色渐变。

例如,深灰色返回黑色 (FF000000),浅灰色返回白色 (FFFFFFFF)。我可以得到实际的灰色代码吗?

4

2 回答 2

2

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

代替:

XSSFColor col = ce.getFillBackgroundXSSFColor();

和:

XSSFColor col = ce.getFillForegroundXSSFColor();

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

于 2013-02-28T20:13:33.633 回答
0

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

我找到了解决方法:

XSSFColor color = ce.getFillForegroundXSSFColor();
byte[] rgb = color.getRgbWithTint();
if (rgb == null) {
     rgb = color.getRgb();
}
于 2015-04-29T07:07:46.180 回答