How to change cell color with NPOI

meme picture meme · May 5, 2016 · Viewed 33.5k times · Source
using NPOI.XSSF.UserModel;
using NPOI.XSSF.Model;

using NPOI.HSSF.UserModel;
using NPOI.HSSF.Model;

using NPOI.SS.UserModel;
using NPOI.SS.Util;


(...)

XSSFWorkbook hssfwb;

using (FileStream file = new FileStream(@"D:\VB\XLSX teste com NPOI\XLSX 1\Book1.xlsx", 
     FileMode.Open, FileAccess.Read))
{
    hssfwb = new XSSFWorkbook(file);
    file.Close();
}

ISheet sheet = hssfwb.GetSheetAt(0);
IRow row = sheet.GetRow(0);

ICell cell = row.CreateCell(5);
cell.SetCellValue("test");
cell.CellStyle.FillBackgroundColor = IndexedColors.BrightGreen.Index;
cell.CellStyle.FillPattern = FillPattern.SolidForeground;

using (FileStream file = new FileStream(@"D:\VB\XLSX teste com NPOI\XLSX 1\Book1ee22.xlsx", 
     FileMode.Create, FileAccess.Write))
{
    hssfwb.Write(file);
    file.Close();
}

Version of NPOI: 2.1.3.1 I have this code and it is changing the color for the hole sheet and not just the cell... What is the proper way to change the fill color of the cell?


Here is the working code, based on the answer that is marked as correct below:

XSSFWorkbook hssfwb;
        using (FileStream file = new FileStream(@"D:\Copy D\Tech\VB\XLSX teste com NPOI\XLSX 1\Book1.xlsx", FileMode.Open, FileAccess.Read))
        {
            hssfwb = new XSSFWorkbook(file);
            file.Close();
        }

        ISheet sheet = hssfwb.GetSheetAt(0);
        IRow row = sheet.GetRow(0);


        ICellStyle testeStyle = hssfwb.CreateCellStyle();
        testeStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
        testeStyle.FillForegroundColor = IndexedColors.BrightGreen.Index;
        testeStyle.FillPattern = FillPattern.SolidForeground;


        ICell cell = row.CreateCell(5);
        cell.SetCellValue("testeeerere");
        cell.CellStyle = testeStyle;


        using (FileStream file = new FileStream(@"D:\Copy D\Tech\VB\XLSX teste com NPOI\XLSX 1\Book1ee22.xlsx", FileMode.Create, FileAccess.Write))
        {
            hssfwb.Write(file);
            file.Close();
        }

Answer

Nino picture Nino · May 5, 2016

take a look at this example:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

(...)

Row row = sheet.CreateRow(0);

//styling
Font boldFont = workbook.CreateFont();
boldFont.Boldweight = (short)FontBoldWeight.BOLD;
ICellStyle boldStyle = workbook.CreateCellStyle();
boldStyle.SetFont(boldFont);

boldStyle.BorderBottom = CellBorderType.MEDIUM;
boldStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.GREY_25_PERCENT.index;
boldStyle.FillPattern = FillPatternType.SOLID_FOREGROUND;


for (int i = 0; i < columns.Length; i++)
{
    Cell cell = row.CreateCell(i);
    cell.SetCellValue(columns[i]);
    cell.CellStyle = boldStyle;
}

here you can see how to apply bold, background color and border for each cell in a row. In this example columns is string array representing columns data; use your values instead.