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を返さないことを発見しました。このための回避策を探しています。
私はgetIndexed()にnull以外の値を与えるだけのXSSFColorを返すCellStyleを持っています。これがパレットルックアップが必要な理由です。インデックス値は、値を使用するものがない場合は何も意味しません。 –