访问XSSFWorkbook中的调色板
使用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方法返回ARGBhex代码,用它我可以确定RGB值(显然)。 我希望这有助于为有相同问题的人节省x个小时。
((XSSFColor) color).getARGBHex())
更新2:令我沮丧的是,我发现一些Cell不会返回包含ARGBHex数据的背景XSSFColor。 寻找解决方案。
使用wb.getStylesSource()
,您可以获得一个StylesTable
,您可以从中获取所有CellStyle
对象。 XSSFCellStyle
API有许多方法可以获取颜色对象 – 即XSSFColor
。 XSSFCellStyle
API还可以访问该样式中的所有字体 – 即XSSFFont
,您可以从中再次获取该特定字体的XSSFColor
对象。
一旦您获得了对XSSFColor
访问权限,对getRGB()
的调用将返回RGB值的字节数组。
你不会在这里得到你想要的东西。 没有等效的HSSFPale的XSSF版本。 由于HSSFWorkbook的颜色数量非常有限,因此无需使用。 您提供的链接中给出的说明是您将获得的最接近的说明。 如果你只是问我如何弄清楚当我有一个XSSFColor对象时getRGB()的返回意味着什么颜色,你总是可以参考这个网站,它可以让你输入RGB值并看到颜色,如果你正在寻找一个颜色名称,您将基本上创建自己的实用程序,该实用程序将存储已知的颜色rgb值,并且有一些方法可以查看哪个最接近返回的RGB。 这是我能做的最好的人,我不知道能够为你提供开箱即用function的东西。
需要注意的一点是,Excel反转了普通单元格中实体填充图案的前景和背景的含义*。 因此,您可能需要对具有实体模式类型的单元格使用getFillForegroundColorColor()
方法。
另外,回读上一个问题,64不是有效的颜色索引,因为范围是0..63。 索引64用于指示单元格中的默认前景色。
(*)在条件格式单元格中它不会这样做!!