当前位置: 首页 > 知识库问答 >
问题:

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

邵祺
2023-03-14

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

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

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

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

共有3个答案

卢俭
2023-03-14

对于XSSFWorkbook,使用XSSFColorXSSFColor可以使用byte[]rgbjava。awt。颜色。见下面的例子:

>

  • XSSFWorkbook wb = new XSSFWorkbook();
    XSSFCellStyle cellStyle = wb.createCellStyle();
    byte[] rgb = new byte[3];
    rgb[0] = (byte) 242; // red
    rgb[1] = (byte) 220; // green
    rgb[2] = (byte) 219; // blue
    XSSFColor myColor = new XSSFColor(rgb); // #f2dcdb
    cellStyle.setFillForegroundColor(myColor);
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
    

    看GuenVII的回答

    XSSFColor myColor = new XSSFColor(new java.awt.Color(242, 220, 219)); // #f2dcdb
    cellStyle.setFillForegroundColor(myColor);
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
    

  • 皮承基
    2023-03-14

    对于4.0之前的Apache POI,您只需执行以下操作:

     XSSFColor grey = new XSSFColor(new java.awt.Color(192,192,192));
     cellStyle.setFillForegroundColor(grey);
    

    从POI 4.0开始,您必须提供workbench IndexedColorMap:

     IndexedColorMap colorMap = workbook.getStylesSource().getIndexedColors();
     XSSFColor grey = new XSSFColor(new java.awt.Color(192,192,192), colorMap);
     cellStyle.setFillForegroundColor(grey);
    
    白光耀
    2023-03-14

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

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

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

    因此,您所面临的问题是将rgb值转换为调色板索引。您提出的使用getIndux()的解决方案是合乎逻辑的,但不幸的是,它确实以您可能认为的方式适用于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定义了您可以使用的方法。

     类似资料:
    • 问题内容: 我想将单元格的前景色设置为十六进制代码中的给定颜色。例如,当我尝试将其设置为红色时: 无论我在解码函数的参数中设置了什么十六进制值,getIndexed函数都将始终返回黑色。 可能是我做错了什么吗?我认为这是一个错误,但我不确定… 问题答案: 好消息是,如果您使用的是XSSF,而不是HSSF,那么解决问题的方法就很简单。您只需将样式变量转换为XSSFCellStyle。如果这样做,则存

    • 问题内容: 我有一个代表2的补码的十六进制字符串。是否有一种简单的方法(库/函数)将十六进制转换为十进制而不直接使用其位? EG这是给定左侧十六进制的预期输出: 谢谢! 问题答案: 这似乎在欺骗Java转换数字而不强制给出正结果: 当然,这种情况仅适用于8、16、32和64位2的补码:

    • 问题内容: 据所有文件(尤其是文本文件)末尾所知,有一个 用于EOF或NULL字符的十六进制代码。当我们要编写程序 并读取文本文件的内容时,我们将发送读取函数,直到 收到EOF十六进制代码。 我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我 看不到EOF(文件结尾/ NULL)或EOT(文本结尾)的任何十六进制代码 注意:我的输入文件是一个文本文件,其内容为“ “ EOF”的十六进制代

    • 据我们所知,在所有文件的末尾,特别是文本文件中,有一个十六进制代码表示EOF或NULL字符。当我们想要编写程序并读取文本文件的内容时,我们发送read函数,直到收到EOF hexcode。 我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我看不到EOF(文件结尾/NULL)或EOT(文本结尾)的任何十六进制代码 ASCII/十六进制代码表: 这是十六进制查看器工具的输出: 注意:我的输入

    • 嘿,我在关注波士顿新闻的Android学习系列。我在这个部分:http://www.youtube.com/watch?feature=player_embedded 现在,我想做的是在某个地方(在代码或文件中)保存一些基本颜色,例如红色、绿色等,并为它们分配HEX代码。 比如,如果用户在“edittext”中键入“red”,那么我想将“red”的值存储为“#FF0000”(就像C中的#defin

    • 问题内容: 如何将十进制转换为以下格式的十六进制(至少两位,零填充,没有0x前缀)? 输入: 输出: 输入: 输出: 我尝试过,但似乎它显示了第一个示例,但没有显示第二个示例。 问题答案: 将该功能与格式一起使用。 该部分要求使用至少2位数字,并使用零将其填充到长度,表示小写的十六进制。 的 格式规范的迷你语言 也给你大写十六进制输出,并且可以前缀字段宽度与以包括或前缀(取决于你阉羊使用或作为格式