使用 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 十六进制代码,用它我可以确定 RGB 值(显然)。我希望这有助于为遇到相同问题的人节省 x 小时数。
((XSSFColor) color).getARGBHex())
更新 2:令我沮丧的是,我发现某些单元格不返回包含 ARGBHex 数据的背景 XSSFColor。寻找解决方法。