访问 XSSFWorkbook 中的调色板

2022-09-03 15:15:37

使用 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();

要通过索引颜色获取颜色名称,请执行以下操作:

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。寻找解决此问题的方法。


答案 1

使用 ,您可以获得一个 StylesTable,从中获取所有对象。XSSFCellStyle API具有任意数量的方法来获取颜色对象 - 即XSSFColor。该 API 还可以访问该样式中的所有字体 - 即 XSSFFont,您可以从中再次获取该特定字体的对象。wb.getStylesSource()CellStyleXSSFCellStyleXSSFColor

一旦您访问了该值,调用 将返回 RGB 值的字节数组。XSSFColorgetRGB()


答案 2

你不会在这里得到你想要的。没有等效的XSSF版本的HSSFPalette。不需要它,因为HSSFWorkbook可以使用的颜色数量非常有限。您提供的链接中给出的说明是您将获得的最接近的说明。如果你只是问我如何弄清楚getRGB()的返回是什么意思,一旦我有一个XSSFColor对象,你可以随时参考这个网站,它会让你输入RGB值并看到颜色,如果你正在寻找一个颜色名称,你将不得不基本上创建自己的实用程序,它将存储已知的rgb值的颜色,并有一些方法看到最接近您返回的RGB。这是我能做的最好的人,我不知道有什么东西可以给你这个开箱即用的功能。