有什么办法可以使用NPOI在excel文档中从'#72fe9c'这样的十六进制值向单元格添加颜色

时间:2019-04-04 11:06:52

标签: c# excel npoi

由于我是NPOI的新手,所以我想为Excel工作表中的单元格添加颜色。我有一个像'#ffeeff'这样的十六进制值,并且在ICellStyle.FillForegroundColor中只能分配短整数值。

  

System.OverflowException:对于Int16,值太大或太小。

我已经尝试过这样的代码,并且可以正常工作

style.FillForegroundColor = HSSFColor.Grey25Percent.Index;

但是我只有可以转换为int的十六进制值,但是它仅支持简短的int值。

//it is working
style.FillForegroundColor = HSSFColor.Grey25Percent.Index;

// not working for me as '#ffeeff' canot be converted to short, it can only be converted to int
style.FillForegroundColor = short.Parse(fontcolorCode.Substring(1), NumberStyles.HexNumber)

style.FillForegroundColor = short.Parse(fontcolorCode.Substring(1), NumberStyles.HexNumber) 

它不应引发错误,并且在excel工作表中,必须将相同的颜色(fontcolorCode)应用于单元格

1 个答案:

答案 0 :(得分:1)

shortInt16)不足以达到此值。以intInt32)代替:

string myHexColor = "#ffeeff";

int x = int.Parse(myHexColor.Substring(1), NumberStyles.HexNumber);

Console.WriteLine("Color is:  " + x);              //   16772863 
Console.WriteLine("Max short: " + short.MaxValue); //      32767
Console.WriteLine("Max int:   " + int.MaxValue);   // 2147483647

您必须创建一个颜色对象:

string myHexColor = "#ffeeff";

byte r = Convert.ToByte(myHexColor.Substring(1, 2).ToUpper(), 16);
byte g = Convert.ToByte(myHexColor.Substring(3, 2), 16);
byte b = Convert.ToByte(myHexColor.Substring(5, 2), 16);
Console.WriteLine("{0} = {1}/{2}/{3}", myHexColor, r, g, b);

IWorkbook workbook = null;
NPOI.XSSF.UserModel.XSSFCellStyle style = (NPOI.XSSF.UserModel.XSSFCellStyle)workbook.CreateCellStyle();

// Here we create a color from RGB-values
IColor color = new NPOI.XSSF.UserModel.XSSFColor(new byte[] { r, g, b });

style.SetFillForegroundColor(color );

ICell cellToPaint = null; // Select your cell..
cellToPaint.CellStyle = style;