Apache poi excel颜色单元问题
Posted
技术标签:
【中文标题】Apache poi excel颜色单元问题【英文标题】:Apache poi excel color cell issue 【发布时间】:2015-03-19 14:55:15 【问题描述】:我正在使用apache poi写excel数据。
String colour = "A2C465";
byte[] ret = new byte[3];
for(int i=0; i<3; i++)
ret[i] = (byte)hexToInt(colour.charAt(i * 2), colour.charAt(i*2+1));
public int hexToInt(char a, char b)
int x = a < 65 ? a-48 : a-55;
int y = b < 65 ? b-48 : b-55;
return x*16+y;
在循环迭代之后,我得到了 ret = -94,-60,101。但实际的 RGB 代码是 162,196,101(因为从 int 转换为 byte)。因此颜色在 excel 表中变得不同.你能帮我吗?
【问题讨论】:
请提供hexToInt(char c1, char c2)...
的代码。为什么不简单地使用Integer.parseInt("A2", 16)
、Integer.parseInt("C4", 16)
等等?
谢谢你的回复,我已经添加了代码
感谢您的回复
"字节数据类型是一个8位有符号二进制补码整数,最小值为-128,最大值为127(含)"。见docs.oracle.com/javase/tutorial/java/nutsandbolts/…。所以十六进制“A2” = int 162 = 字节 -94 和十六进制“C4” = int 196 = 字节 -60。您在字节数组中的结果没问题。您如何将此字节数组与 apache poi 一起使用?至少对于Class HSSFPalette
和public HSSFColor addColor(byte red, byte green,byte blue)
,字节应该像无符号一样工作。但是java.awt.Color
需要 R、G、B 的 int 值。
【参考方案1】:
Axel Richter 的评论有您正在寻找的答案,如果您需要将字节转换为 int,您应该使用按位并避免保留符号。以下示例将字节显示为其有符号值以及转换为 int 时。
byte[] ret = DatatypeConverter.parseHexBinary("A2C465");
for (byte b: ret)
int asInt = b & 0xFF;
System.out.println(b + " vs " + asInt);
【讨论】:
【参考方案2】:如果返回值为负,则加256!
-94+256 = 162
-60+256 = 196
101 将保持 101,因为一个字节的范围是 -128 到 127。
【讨论】:
以上是关于Apache poi excel颜色单元问题的主要内容,如果未能解决你的问题,请参考以下文章