Пользовательский цвет для ICellStyle FillForegroundColor, чем предоставленные именованные цвета

Мы недавно начали использовать компоненты NPOI.

У нас возникли проблемы с установкой FillForegroundColor свойства ICellStyle.

ICellStyle HeaderCellStyle = xssfworkbook.CreateCellStyle(); 

HeaderCellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.RED.index;

FillForegroundColor ожидает типа short.

Как установить другой цвет вместо использования цветов в HSSFColor.

Нам нужно установить значение "RGB192:0:0", и как это сделать для свойства ICellStyle FillForegroundColor

Колуд кто-нибудь нам поможет каким-то примером?


person SivaRajini    schedule 27.03.2014    source источник


Ответы (5)


Я нашел решение самостоятельно. Пожалуйста, обратитесь к приведенному ниже коду

byte[] rgb = new byte[3] { 192, 0, 0 };
 XSSFCellStyle HeaderCellStyle1 = (XSSFCellStyle)xssfworkbook.CreateCellStyle();
 HeaderCellStyle1.SetFillForegroundColor(new XSSFColor(rgb));
person SivaRajini    schedule 27.03.2014
comment
Превращение моего стиля в XSSFCellStyle было всем, чего мне не хватало. - person David Murdoch; 16.07.2014
comment
Извините, что проголосовал против, но это не ответ на вопрос. Ваш вопрос касается ICellStyle, но вы отвечаете только для класса XSSFCellStyle. Это не работает с другим HSSFCellStyle классом, который также наследует ICellStyle - person Jérôme MEVEL; 29.10.2018
comment
@ JérômeMEVEL HSSF понимает только индекс цвета в палитре. Ваши варианты выглядят так: либо искать в палитре книги что-то близкое, либо заменять существующую запись палитры на свой собственный цвет. - person Pedro; 30.10.2018

Извините, и еще раз.

Color SuperColor = Color.FromArgb(192, 0, 0);
styleH.FillForegroundColor = GetXLColour(hssfworkbook, SuperColor);


private short GetXLColour(HSSFWorkbook workbook, System.Drawing.Color SystemColour)
{
    short s = 0;
    HSSFPalette XlPalette = workbook.GetCustomPalette();
    NPOI.HSSF.Util.HSSFColor XlColour = XlPalette.FindColor(SystemColour.R, SystemColour.G, SystemColour.B);
    if (XlColour == null)
    {
        if (NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE < 255)
        {
            if (NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE < 64)
            {
                NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE = 64;
                NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE += 1;
                XlColour = XlPalette.AddColor(SystemColour.R, SystemColour.G, SystemColour.B);
            }
            else
            {
                XlColour = XlPalette.FindSimilarColor(SystemColour.R, SystemColour.G, SystemColour.B);
            }

            s = XlColour.GetIndex();
        }

    }
    else
        s = XlColour.GetIndex();

    return s;
}  
person 村井誠    schedule 16.01.2015
comment
У вас есть решение для XSSFWorkbooks? - person meme; 09.05.2016

изменить цвет шрифта

пример..

ICellStyle style0 = hssfworkbook.CreateCellStyle();

IFont font0 = hssfworkbook.CreateFont();
font0.Color = NPOI.HSSF.Util.HSSFColor.RED.index;
style0.SetFont(font0);

for (int i = 0; i < cell.Length; i++)
{
    cell[i].CellStyle = style0;
}

--

Я японец, не знаю английского. извиняюсь.

person 村井誠    schedule 16.01.2015

Для тех, кто приедет сюда в 2016 году, вы можете найти множество полезных цветов здесь:

nameStyle.Color = NPOI.HSSF.Util.HSSFColor.BlueGrey.Index;

При этом BlueGrey - это цвет, который вы ищете.

person Christof Mehlstäubler    schedule 12.07.2016

Вот ответ, эквивалентный VB, мне пришлось его преобразовать, так что, возможно, это спасет кого-то от работы, если они его найдут:

'my workbook is from a template that already contains some header data
Dim fs As New FileStream(HttpContext.Current.Server.MapPath("..\_ExcelTemplates\filename.xlsx"), FileMode.Open, FileAccess.Read)            
Dim workbook As IWorkbook
workbook = New XSSFWorkbook(fs) 
Dim sheet_stats As ISheet = workbook.GetSheet("Stats")

'style
Dim rgb_grandTotalRow_fg() As Byte = New Byte() {197, 217, 241} 'lightish blue
Dim style_grandTotalRow As XSSFCellStyle = workbook.CreateCellStyle()
style_grandTotalRow.SetFillForegroundColor(New XSSFColor(rgb_grandTotalRow_fg)) 'XSSFCellStyle only for other use (FillForegroundColor = IndexedColors.LightTurquoise.Index)
style_grandTotalRow.FillPattern = FillPattern.SolidForeground

'apply the style to a cell
Dim rowHdr As IRow = sheet_stats.GetRow(2)
Dim cell As ICell

cell = Row.CreateCell(1) 'create cell at col index 1
cell.CellStyle = style_grandTotalRow
cell.SetCellValue("TEST")
person Taylor Brown    schedule 28.02.2018