Как установить цвет фона ячейки excel с системным цветом в NPOI

У меня есть объект класса Foo с атрибутом StatusColor, который используется в нескольких местах. Теперь мне нужно сгенерировать файл Excel с помощью NPOI, в котором столбец 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 индекс цвета?

Я пробовал: я написал функцию для преобразования (из Color в HSSFColor индекс), но не уверен, сколько 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;
}

person Prem    schedule 02.07.2019    source источник
comment
возможно, это поможет - github.com/tonyqus/npoi / blob / master / examples / hssf /   -  person piedpiper    schedule 02.07.2019
comment
OP и голосующий, возможно, нуждаются в обновлении Как спросить   -  person MickyD    schedule 02.07.2019
comment
Спасибо @piedpiper, но я не смог найти, используется ли в коде System.Color. Не могли бы вы указать номер строки, к которой вы хотите, чтобы я обратился?   -  person Prem    schedule 02.07.2019
comment
Что такое SystemColor? что ты уже испробовал?   -  person Jean-Francois T.    schedule 02.07.2019
comment
Привет @ jean-francois-t, извини, я имел в виду System.Drawing.Color.   -  person Prem    schedule 04.07.2019


Ответы (1)


Вы можете использовать это:

var color = new XSSFColor(fooObject.StatusColor);
statusStyle.FillForegroundColor = color.Indexed;
person Krishna Chaithanya Muthyala    schedule 05.07.2019