POI を使用する場合、Excel ドキュメントのセルとフォントには色情報が含まれており、常に RGB 値を返すとは限らず、インデックス値のみを提供することがよくあります。色を取得するには、インデックス付きの値を何かに対して検索する必要があります。HSSFWorkbook (xls) には、パレットを取得するために使用できるメソッドがあります。
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()); } }
同様の質問:特定のセルの (Java Apache POI HSSF) 背景色を取得するにはどうすればよいですか?
参照: http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors
更新 1:ようやく機能するものを見つけました。XSSFColor のこのメソッドは ARGB 16 進コードを返し、それを使用して RGB 値を (明らかに) 判別できます。これにより、同じ問題を抱えている人が x 時間節約できることを願っています。
((XSSFColor) color).getARGBHex())
更新 2:残念なことに、一部のセルが ARGBHex データを含む背景の XSSFColor を返さないことがわかりました。これに対する回避策を探しています。