2017-07-26 15 views
1

Excelシート内のセルの色を出力するコードを作成しようとしていますが、GetFillBackgroundColorメソッドを呼び出すと3つの負の値が返されます。私は、何とか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で署名されています。

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

しかし、あなたは Color color = style.getFillBackgroundColorColor();を行う場合は、2のうち、唯一可能塗りつぶしの色を取得します:あなたは 0xFFとバイナリ ANDを行うことによって、その符号なしの値を得ることができます。

Excel細胞はパターン充填を有し、次にFillBackgroundColorColorはパターンの後ろの色であり、FillForegroundColorColorはパターンの色である。しかし、完全に塗りつぶされたデフォルトのセルはベタパターンなので、FillBackgroundColorColorはパターンで完全に覆われているため、FillForegroundColorColorが必要です。

だから私はあなたがColor color = style.getFillForegroundColorColor();が必要と考えています。

+0

ありがとう!それは正の数で数値を変換する際に機能します。しかし、私はいくつかの数字をRGBでテストし、間違った色に変換しました。たとえば、私は青い色を持っていますが、その数に応じて暗い灰色でなければなりません。なぜそれが起こっているのか分かりますか? –

+0

それは素晴らしい作品!どうもありがとうございます!! –