NPOI: создайте ячейку, содержащую две строки разного размера.

поэтому, как следует из названия, я хочу создать ячейку в рабочей книге NPOI 2.1.3, содержащую 2 строки: строку «нормального» размера и строку «маленького» размера. => Я хочу изменить размер шрифта для части ячейки.

Мой код до сих пор:

var planCell = planRow.CreateCell(lineCnt + 1);

var planCellStyle = workbook.CreateCellStyle();
planCellStyle.WrapText = true;
planCellStyle.VerticalAlignment = VerticalAlignment.Top;
planCellStyle.Alignment = HorizontalAlignment.Left;
var font = workbook.CreateFont();
font.FontName = HSSFFont.FONT_ARIAL;
font.FontHeightInPoints = 16;
font.Boldweight = (short)FontBoldWeight.Bold;
planCellStyle.SetFont(font);
planCell.CellStyle = planCellStyle;

string planTitleContent = string.Empty;
... (some logic to get desired string for planTitleContent)

string planInfoContent = string.Empty;
... (some logic to get desired string for planInfoContent)

planCell.SetCellValue(planTitleContent + "\n\n"+planInfoContent);

Чтобы быть точным, я хочу, чтобы часть «planInfoContent» отображалась с меньшим размером шрифта, чем часть «planCellContent». Я много искал, но только что нашел значение CellStyle, которое применяется ко всей ячейке. Поэтому я надеюсь, что я что-то упустил, потому что две ячейки на самом деле не вариант.


person Dominik    schedule 30.01.2015    source источник


Ответы (1)


Только что сам разобрался :)

Сначала создайте 2 шрифта нужного формата (для меня и для простоты важен только размер шрифта):

var font1 = excel.CreateFont();
font1.FontName = HSSFFont.FONT_ARIAL;
font1.FontHeightInPoints = 12;
font1.Boldweight = (short)FontBoldWeight.Normal;

var font2 = excel.CreateFont();
font2.FontName = HSSFFont.FONT_ARIAL;
font2.FontHeightInPoints = 8;
font2.Boldweight = (short)FontBoldWeight.Normal;

Затем, после того как вы получили свои строки, используйте (N)POI applyFont-метод.

Одна из его реализаций в NPOI имеет следующую подпись:

applyFont(int startIndex, int endIndex, IFont font)

так что теперь, имея строку planTitleContent и строку planInfoContent, оставшиеся шаги довольно очевидны: просто создайте экземпляр IRichTextString и добавьте к нему свои строки через параметр-конструктор. Затем примените нужные шрифты через индекс следующим образом:

IRichTextString formattedCellContent = new HSSFRichTextString(planTitleContent + "\n"+planInfoContent);
richString.ApplyFont(0, planTitleContent.Length, font1);
richString.ApplyFont(planTitleContent.Length + 1, (planTitleContent + "\n" + planInfoContent).Length, font2);

planCell.SetCellValue(formattedCellContent);

так что это работает как шарм для меня. Надеюсь, это поможет некоторым другим людям!

person Dominik    schedule 30.01.2015