十六进制代码的Apache POI XSSFColor

我想将单元格的前景色设置为十六进制代码中的给定颜色。例如,当我尝试将其设置为红色时:

style.setFillForegroundColor(new XSSFColor(Color.decode("#FF0000")).getIndexed());

无论我在解码函数的参数中设置了什么十六进制值,getIndexed函数都将始终返回黑色。

可能是我做错了什么吗?我认为这是一个错误,但我不确定…

回答:

好消息是,如果您使用的是XSSF,而不是HSSF,那么解决问题的方法就很简单。您只需将样式变量转换为XSSFCellStyle。如果这样做,则存在带有XSSFColor参数的setFillForegroundColor版本,因此您无需调用getIndexed()。这是一些示例代码:

XSSFCellStyle style = (XSSFCellStyle)cell.getCellStyle();

XSSFColor myColor = new XSSFColor(Color.RED);

style.setFillForegroundColor(myColor);

但是,如果您使用的是HSSF,那么事情就更难了。HSSF使用调色板,它只是一种颜色数组。传递给setFillForegroundColor的short值是调色板的索引。

因此,您遇到的问题是将rgb值转换为调色板索引。您使用getIndexed()提出的解决方案是合乎逻辑的,但是不幸的是,它确实以您可能认为的方式适用于XSSFColor。

幸运的是,有一个解决方案。目前,让我们假设您会满意使用默认调色板中的一种颜色,而不是使用自定义颜色。在这种情况下,您可以使用HSSFPalette和HSSFColor类来解决此问题。这是一些示例代码:

HSSFWorkbook hwb = new HSSFWorkbook();

HSSFPalette palette = hwb.getCustomPalette();

// get the color which most closely matches the color you want to use

HSSFColor myColor = palette.findSimilarColor(255, 0, 0);

// get the palette index of that color

short palIndex = myColor.getIndex();

// code to get the style for the cell goes here

style.setFillForegroundColor(palIndex);

如果要使用默认调色板中尚未包含的自定义颜色,则必须将它们添加到调色板中。HSSFPalette的javadoc定义了您可以用来执行此操作的方法。

以上是 十六进制代码的Apache POI XSSFColor 的全部内容, 来源链接: utcz.com/qa/421864.html

回到顶部