Ошибка цвета шрифта ячейки NPOI?
Я пытаюсь прочитать цвет шрифта ячейки Excel, используя NPOI 2.2.1 или 2.1.3.1. Неважно, какой цвет шрифта. NPOI всегда говорит, что это 8 (черный). Фрагмент кода ниже
IWorkbook workbook = WorkbookFactory.Create(new FileStream(txtFileName.Text, FileMode.Open, FileAccess.Read));
ISheet worksheet = workbook.GetSheet("sheet1");
IRow row = worksheet.GetRow(0);
lblFontColor.Text = row.GetCell(0).CellStyle.GetFont(workbook).Color.ToString();
Это ошибка или я что-то не так делаю?
Обновление: Это кажется проблемой только при чтении файлов.xlsx, а не старых файлов.xls
1 ответ
Вы можете установить любой цвет фона шрифта:
hstyle =(XSSFCellStyle) wb.CreateCellStyle();
color = new XSSFColor(new byte[] { 191,191,191});
hstyle.VerticalAlignment = VerticalAlignment.Center;
hstyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
hfont = (XSSFFont)wb.CreateFont();
hfont.FontHeightInPoints = 12;
hfont.FontName = "Calibri";
hfont.Boldweight = (short)FontBoldWeight.Bold;
hfont.SetColor(color);
hstyle.SetFont(hfont);
crow = sheet.CreateRow(rowindex);
ccel = crow.CreateCell(0);
ccel.SetCellValue(Title);
ccel.CellStyle = hstyle;
Вы можете получить цвет шрифта как IColor
или как RGB (byte[3]
), получив XSSFFont
а также XSSFColor
, или же HSSFFont
а также HSSFColor
:
private static byte[] GetFontColourRGB(ICell cell)
{
IWorkbook workbook = cell.Row.Sheet.Workbook;
IFont font = cell.CellStyle.GetFont(workbook);
if (font is XSSFFont)
{
return (font as XSSFFont).GetXSSFColor().RGB;
} else if (font is HSSFFont && workbook is HSSFWorkbook)
{
return (font as HSSFFont).GetHSSFColor(workbook as HSSFWorkbook).RGB;
} else
{
return null;
}
}
Учитывая значение RGB, вы можете использовать таблицу соответствия для имен цветов.