NPOI: Създайте клетка, съдържаща два низа с различни размери

така че, както предполага заглавието, искам да създам клетка в NPOI 2.1.3-Workbook, съдържаща 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)POIs 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