如何在NPOI中使用系统颜色设置Excel单元格背景颜色

时间:2019-07-02 06:57:20

标签: c# .net npoi hssf

我有一个Foo类的对象,其属性StatusColor在多个位置使用。 现在,我必须使用NPOI生成Excel文件,其中Status Color列应与对象具有相同的颜色。

我不知道如何将System.Drawing.Color设置为CellStyle颜色,请帮忙。

我想要类似的东西

class Foo{
    //Properties..
    System.Drawing.Color StatusColor {get;set;}
}

...

//Creating Status Style
var statusStyle = workbook.CreateCellStyle();
statusStyle.FillForegroundColor = fooObject.StatusColor; //Of course, it won't work.
//Is there way to convert from System.Color to HSSFColor?
statusStyle.FillPattern = FillPattern.SolidForeground;

...

//Set Style
excelCell.CellStyle = style;

简短输入: 如何将System.Drawing.Color转换为HSSFColor颜色索引?

我尝试过: 我已经编写了一个转换函数(从ColorHSSFColor索引),但是不确定要写多少个if-else

public static short ToHSSFColorIndex(Color color)
{
    if (Color.Green.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.Green.Index;
    else if (Color.Green.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.LightGreen.Index;
    else if (Color.Red.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.Red.Index;
    else if (Color.DarkRed.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.DarkRed.Index;
    else if (Color.Gray.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.Grey50Percent.Index;
    else if (Color.Blue.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.Blue.Index;
    else if (Color.Yellow.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.Yellow.Index;
    else if (Color.YellowGreen.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.LightYellow.Index;
    else if (Color.White.ToArgb().Equals(color.ToArgb()))
        return HSSFColor.White.Index;
    else
        return HSSFColor.COLOR_NORMAL;
}

1 个答案:

答案 0 :(得分:0)

您可以使用此:

var color = new XSSFColor(fooObject.StatusColor);
statusStyle.FillForegroundColor = color.Indexed;