2013-08-07 17 views
11

POIを使用している場合、Excelドキュメントのセルとフォントには色情報が含まれており、常にrgb値を返すとは限らず、多くの場合インデックス値のみを提供します。索引付けされた値は、色を取得するために何かを参照する必要があります。 HSSFWorkbook(XLS)でパレットを取得するために利用可能にする方法があります:XSSFWorkbookのカラーパレットへのアクセス

InputStream in = new FileInputStream("sheet.xls"); 
HSSFWorkbook wb = new HSSFWorkbook(in); 
wb.getCustomPalette(); 

XSSFWorkbook(のxlsx)にアクセスするとそこには、このような方法はありませんし、実際に私はどこにも関連するクラスには、パレットの情報を見つけることができません。私はXSSFontとCellからインデックス値を取得することができますが、色 "名前"ほど多く取得する唯一の方法は、IndexedColors列挙型と照合することです。これは私を同じ元の問題に戻します。私はまだ使用するrgb値がありません。

InputStream in = new FileInputStream("sheet.xlsx"); 
XSSFWorkbook wb = new XSSFWorkbook (in); 
wb.getCustomPalette(); <-- fail! 

私はそうのように、CellStyleの方法によりXSSFColorを取得しています:

CellStyle style = cell.getCellStyle(); 
XSSFColor color = style.getFillBackgroundColorColor(); 

はIndexedColorsを経由して、カラー名を取得するには:

for (IndexedColors c : IndexedColors.values()) { if (c.index == indexColor){ System.out.println("Color: " + c.name()); } } 

同様の質問:How do I get the (Java Apache POI HSSF) Background Color for a given cell?

リファレンス:http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors

更新1:私は最後に動作するものを見つけました。このXSSFColorのメソッドはARGBの16進コードを返し、それを使って(明らかに)RGB値を決定することができます。これは、同じ問題を抱えている人のx時間を​​節約するのに役立ちます。

((XSSFColor) color).getARGBHex()) 

アップデート2:私の失望に多く、私はいくつかの細胞はARGBHexデータを含む背景XSSFColorを返さないことを発見しました。このための回避策を探しています。

答えて

8

wb.getStylesSource()を使用すると、CellStyleオブジェクトをすべて取得できるStylesTableが得られます。 XSSFCellStyle APIには、カラーオブジェクトを取得するためのメソッドがいくつでも用意されています。つまり、XSSFColorです。 XSSFCellStyle APIは、そのスタイル内のすべてのフォント、つまりXSSFFontにアクセスすることができます。オブジェクトから、その特定のフォントを再度取得できます。

XSSFColorにアクセスすると、getRGB()を呼び出すと、RGB値のバイト配列が返されます。

+0

私はgetIndexed()にnull以外の値を与えるだけのXSSFColorを返すCellStyleを持っています。これがパレットルックアップが必要な理由です。インデックス値は、値を使用するものがない場合は何も意味しません。 –

1

あなたはここで探しているものを正確に取得するつもりはありません。同等のXSSFバージョンのHSSFPaletteはありません。 HSSFWorkbookの色数は非常に限られていたため、その必要はありません。あなたが提供したlinkで与えられた指示は、あなたが得る最も近いものです。一度XSSFColorオブジェクトを取得するとgetRGB()の返り値がどのような色であるのかを単に調べるには、thisというWebサイトを参照してください。これはRGB値を入力し、色の名前を探しています。基本的に独自のユーティリティを作成して、色の既知のrgb値を保存し、返されたRGBに最も近いものを確認する必要があります。それは私が人をすることができる最高です、私はあなたにこの機能をあなたに与える何かを認識していません。

+0

カラーを調べるためのパレットを取得する方法がない場合、なぜXSSFColorはrgbを返しませんか?このリンクは、作成する色を設定する方法を示しています。私は既存のxlsxを読んでいます。 –

1

注目すべき点は、通常のセルでは塗りつぶしパターンの前景色と背景の意味が逆転することです。だから、固体パターンタイプのセルにgetFillForegroundColorColor()メソッドを使用する必要があります。

また、以前の質問に戻ると、範囲は0..63であるため、64は有効なカラーインデックスではありません。インデックス64は、セル内のデフォルトの前景色を示すために使用される。

(*)条件付き書式のセルでは、これは実行されません!

+0

NULLと空白の列を許可しているので、私は64の代わりにWHITEをコードに切り替えました。私はあなたが言及するこの列の色の交換を確認します。 –

関連する問題