gpt4 book ai didi

java - 来自十六进制代码的 Apache POI XSSFColor

转载 作者:IT老高 更新时间:2023-10-28 20:54:19 26 4
gpt4 key购买 nike

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

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

无论我在decode函数的参数中设置什么Hex值,getIndexed函数总是返回黑色。

会不会是我做错了什么?我认为这是一个错误,但我不确定......

最佳答案

好消息是,如果您使用的是 XSSF,而不是 HSSF,那么您的问题的解决方案相当容易。您只需要将样式变量转换为 XSSFCellStyle。如果你这样做了,那么有一个版本的 setFillForegroundColor 接受 XSSFColor 参数,所以你不需要调用 getIndexed()。下面是一些示例代码:

XSSFCellStyle style = (XSSFCellStyle)cell.getCellStyle();
XSSFColor myColor = new XSSFColor(Color.RED);
style.setFillForegroundColor(myColor);

但是,如果您使用的是 HSSF,那么事情就会变得更加困难。 HSSF 使用调色板,它只是一组颜色。传入 setFillForegroundColor 的短值是调色板的索引。

所以您遇到的问题是将 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 定义了您可以使用的方法。

关于java - 来自十六进制代码的 Apache POI XSSFColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10912578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com