NPOI 不会改变单元格的字体颜色
NPOI does not change cell´s font color
我正在尝试有条件地更改单元格的字体颜色。这是我最后一次尝试:
IWorkbook wb = null;
using (FileStream _fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
wb = WorkbookFactory.Create(_fileStream);
_fileStream.Close();
}
ISheet sheet = wb.GetSheet(sheetName);
IFont font = wb.CreateFont();
...
...
// within a loop
ICell cell = sheet.GetRow(r).GetCell(col);
if (integrity < 1)
{
ICellStyle redStyle = cell.CellStyle;
font.Color = IndexedColors.Red.Index;
redStyle.SetFont(font);
cell.CellStyle = redStyle;
}
else
{
ICellStyle normalStyle = cell.CellStyle;
font.Color = XSSFFont.DEFAULT_FONT_COLOR;
normalStyle.SetFont(font);
cell.CellStyle = normalStyle;
}
但是,当满足条件时,字体不会改变。似乎样式适用于所有单元格而不是我在循环中获得的单元格。我已经阅读了一些与此问题相关的问题,但我无法解决它。
这个新尝试正在格式化所有单元格。不管是否满足条件
ICellStyle redStyle = cell.CellStyle;
font.Color = IndexedColors.Red.Index;
redStyle.SetFont(font);
//This is how I am trying to change cells format
if (integrity < 1)
{
cell.CellStyle.SetFont(font);
}
Joao 响应会将所有单元格格式化为 "normalStyle"
默认情况下,每个单元格都将使用相同的 CellStyle 对象。如果你想为不同的单元格使用不同的样式,你必须创建不同的对象。
ICellStyle redStyle = wb.CreateCellStyle();
font.Color = IndexedColors.Red.Index;
redStyle.SetFont(font);
ICellStyle normalStyle = wb.CreateCellStyle();
font.Color = XSSFFont.DEFAULT_FONT_COLOR;
normalStyle.SetFont(font);
// within a loop
ICell cell = sheet.GetRow(r).GetCell(col);
if (integrity < 1)
{
cell.CellStyle = redStyle;
}
else
{
cell.CellStyle = normalStyle;
}
(注意:我根本没有测试过这段代码。我忘记了 CreateCellStyle 是否那样工作。但它至少应该为您指明正确的方向。)
所以我最终定义了一个样式,我将其设置为满足条件的单元格。
IFont redfont = wb.CreateFont();
redfont.Color = IndexedColors.Red.Index;
redfont.FontHeight = 8;
ICellStyle style = wb.CreateCellStyle();
...
if (integrity < 1)
{
style.CloneStyleFrom(cell.CellStyle);
style.SetFont(redfont);
cell.CellStyle = style;
}
感谢您的帮助!
对于 XSSF 格式,使用此方法创建字体,然后将其分配给单元格
XSSFFont defaultFont = (XSSFFont)workbook.CreateFont();
defaultFont.FontHeightInPoints = (short)10;
defaultFont.FontName = "Arial";
defaultFont.Color = IndexedColors.Black.Index;
defaultFont.IsBold = false;
defaultFont.IsItalic = false;
defaultFont.Boldweight = 700;
XSSFCellStyle defaultStyle = (XSSFCellStyle)workbook.CreateCellStyle();
defaultStyle.SetFont(defaultFont);
我正在尝试有条件地更改单元格的字体颜色。这是我最后一次尝试:
IWorkbook wb = null;
using (FileStream _fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
wb = WorkbookFactory.Create(_fileStream);
_fileStream.Close();
}
ISheet sheet = wb.GetSheet(sheetName);
IFont font = wb.CreateFont();
...
...
// within a loop
ICell cell = sheet.GetRow(r).GetCell(col);
if (integrity < 1)
{
ICellStyle redStyle = cell.CellStyle;
font.Color = IndexedColors.Red.Index;
redStyle.SetFont(font);
cell.CellStyle = redStyle;
}
else
{
ICellStyle normalStyle = cell.CellStyle;
font.Color = XSSFFont.DEFAULT_FONT_COLOR;
normalStyle.SetFont(font);
cell.CellStyle = normalStyle;
}
但是,当满足条件时,字体不会改变。似乎样式适用于所有单元格而不是我在循环中获得的单元格。我已经阅读了一些与此问题相关的问题,但我无法解决它。
这个新尝试正在格式化所有单元格。不管是否满足条件
ICellStyle redStyle = cell.CellStyle;
font.Color = IndexedColors.Red.Index;
redStyle.SetFont(font);
//This is how I am trying to change cells format
if (integrity < 1)
{
cell.CellStyle.SetFont(font);
}
Joao 响应会将所有单元格格式化为 "normalStyle"
默认情况下,每个单元格都将使用相同的 CellStyle 对象。如果你想为不同的单元格使用不同的样式,你必须创建不同的对象。
ICellStyle redStyle = wb.CreateCellStyle();
font.Color = IndexedColors.Red.Index;
redStyle.SetFont(font);
ICellStyle normalStyle = wb.CreateCellStyle();
font.Color = XSSFFont.DEFAULT_FONT_COLOR;
normalStyle.SetFont(font);
// within a loop
ICell cell = sheet.GetRow(r).GetCell(col);
if (integrity < 1)
{
cell.CellStyle = redStyle;
}
else
{
cell.CellStyle = normalStyle;
}
(注意:我根本没有测试过这段代码。我忘记了 CreateCellStyle 是否那样工作。但它至少应该为您指明正确的方向。)
所以我最终定义了一个样式,我将其设置为满足条件的单元格。
IFont redfont = wb.CreateFont();
redfont.Color = IndexedColors.Red.Index;
redfont.FontHeight = 8;
ICellStyle style = wb.CreateCellStyle();
...
if (integrity < 1)
{
style.CloneStyleFrom(cell.CellStyle);
style.SetFont(redfont);
cell.CellStyle = style;
}
感谢您的帮助!
对于 XSSF 格式,使用此方法创建字体,然后将其分配给单元格
XSSFFont defaultFont = (XSSFFont)workbook.CreateFont();
defaultFont.FontHeightInPoints = (short)10;
defaultFont.FontName = "Arial";
defaultFont.Color = IndexedColors.Black.Index;
defaultFont.IsBold = false;
defaultFont.IsItalic = false;
defaultFont.Boldweight = 700;
XSSFCellStyle defaultStyle = (XSSFCellStyle)workbook.CreateCellStyle();
defaultStyle.SetFont(defaultFont);