2017-07-26 158 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

這很棒!非常感謝!! –