我正在使用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)。我可以获得实际的灰色代码吗?
答案 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();
}