2017-07-26 115 views
1

我想写一个输出Excel工作表中单元格颜色的代码,但是当调用GetFillBackgroundColor方法时,它给了我三个负值。我想知道,有没有关于RGB数字? 这是我写的代码:Apache POI - 负值颜色值

CellStyle style = currentCell2.getCellStyle(); 
Color color = style.getFillBackgroundColorColor(); 
if (color != null) { 
    byte[] clr = ((XSSFColor) color).getRGB(); 
    System.out.print("("); 
    for (int k = 0; k<clr.length; k++) { 
     System.out.print(clr[k]+" "); 
    } 
    System.out.print(")"); 
} 

A picture of the Excel sheet

+0

你能给我们用来测试它的颜色吗? – XtremeBaumer

+0

我添加了我正在使用的excel文件的图片。 –

回答

0

一个byte在Java中总是签署。您可以通过做一个二进制AND0xFF得到它的无符号值:

... 
System.out.print((clr[k] & 0xFF) + " "); 
... 

但是,如果你Color color = style.getFillBackgroundColorColor();将只得到一个可能填充颜色了两个。

Excel单元可能有图案填充,然后FillBackgroundColorColor是图案背后的颜色,而FillForegroundColorColor是图案的颜色。但默认完全填充的单元格具有固定模式,所以您需要FillForegroundColorColor,因为FillBackgroundColorColor完全由该模式覆盖。

所以我相信你会需要Color color = style.getFillForegroundColorColor();

+0

谢谢!这在转换数字是积极的。但我用RGB测试了一些数字,并将它们转换为错误的颜色。例如,我有一个蓝色的颜色,但根据它的数字应该是深灰色。你知道为什么会发生吗? –

+0

这很棒!非常感谢!! –