首页 文章

访问XSSFWorkbook中的调色板

提问于
浏览
13

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

类似的问题:How do I get the (Java Apache POI HSSF) Background Color for a given cell?

参考:http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors

Update 1: 我终于找到了有用的东西 . 这种XSSFColor方法返回ARGB十六进制代码,用它我可以确定RGB值(显然) . 我希望这有助于为有相同问题的人节省x个小时 .

((XSSFColor) color).getARGBHex())

Update 2: 令我沮丧的是,我_____761774_ t返回包含ARGBHex数据的背景XSSFColor . 寻找解决方案 .

3 回答

  • 1

    使用 wb.getStylesSource() ,您可以获得StylesTable,从中可以获得所有 CellStyle 对象 . XSSFCellStyle API有许多方法可以获取颜色对象 - 即XSSFColor . XSSFCellStyle API还可以访问该样式中的所有字体 - 即XSSFFont,您可以从中再次获取该特定字体的 XSSFColor 对象 .

    一旦你获得了 XSSFColor 的访问权限,对 getRGB() 的调用将返回RGB值的字节数组 .

  • 1

    你不会得到你正在寻找的东西 . 由于HSSFWorkbook的颜色数量非常有限,因此不需要它 . 您提供的link中给出的说明是您最接近的 . 如果你只是问我如何弄清楚当我有一个XSSFColor对象时getRGB()的返回意味着什么颜色,你总是可以参考this网站,这将让你输入RGB值并看到颜色,如果你正在寻找一个颜色名称,你必须基本上创建自己的实用程序,它将存储已知的颜色rgb值,并有一些方法看看哪个最接近你返回的RGB . 这是我能做的最好的人,我不知道能够为你提供开箱即用功能的东西 .

  • 9

    需要注意的一点是,Excel反转普通单元格中实体填充图案的前景和背景的含义* . 因此,您可能需要将 getFillForegroundColorColor() 方法用于具有实体图案类型的单元格 .

    另外,回读上一个问题,64不是有效的颜色索引,因为范围是0..63 . 索引64用于指示单元格中的默认前景色 .

    (*)在条件格式单元格中它不会这样做!!

相关问题