Я пытаюсь создать столбец с WrapText установлен в true для файла XLSX с использованием NPOI.NPOI WrapText не работает?
Следующая, кажется, не работает:
var workbook = new XSSFWorkbook();
var headerRow = sheet.CreateRow(0);
var cellType = CellType.String;
var colStyle = sheet.GetColumnStyle(3);
colStyle.WrapText = true;
sheet.SetDefaultColumnStyle(3, colStyle);
headerRow.CreateCell(0, cellType).SetCellValue("Name");
headerRow.CreateCell(3, cellType).SetCellValue("Comments");
var font = workbook.CreateFont();
font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
XSSFCellStyle style = (XSSFCellStyle)workbook.CreateCellStyle();
style.SetFont(font);
style.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground;
style.FillForegroundColor = IndexedColors.Grey25Percent.Index;
style.IsLocked = false;
style.WrapText = true;
for (int i = 0; i < 6; i++)
{
var cell = headerRow.Cells[i];
cell.CellStyle = style;
}
headerRow.RowStyle = style;
sheet.SetColumnWidth(0, 30 * 256);
sheet.SetColumnWidth(1, 20 * 256);
sheet.SetColumnWidth(2, 20 * 256);
sheet.SetColumnWidth(3, 50 * 256);
sheet.SetColumnWidth(4, 30 * 256);
sheet.SetColumnWidth(5, 50 * 256);
int rowNumber = 1;
style = (XSSFCellStyle)workbook.CreateCellStyle();
style.IsLocked = false;
style.WrapText = true;
foreach (MemberListViewModel member in members)
{
var row = sheet.CreateRow(rowNumber++);
row.CreateCell(0).SetCellValue(member.FullName);
row.CreateCell(3).SetCellValue(member.endowed_professorship);
}
workbook.Write(output);
Естественно, что документация является немного света для этого.
Любые предложения по изменению кода? В противном случае он работает нормально.
Я просто не могу заставить wraptext работать.
EDIT:
После размещения вопроса, я пересмотрел свой код, чтобы использовать Reflection, чтобы отделить код от отдельных классов (есть несколько я работаю с). Для этого используется модифицированный интерфейс Kendo с кнопкой экспорта Excel в сетке.
Пересмотренный кодекс включает в себя изменения, внесенные в ответ:
rowNumber = 1;
var cellStyle = (XSSFCellStyle)workbook.CreateCellStyle();
cellStyle.WrapText = true;
foreach (var member in members)
{
String value = "";
var aType = member.GetType();
var real = aType.GetProperty(headings[i]);
if (real != null)
{
value = (real.GetValue(member) != null) ? String.Format(format, real.GetValue(member)) : "";
}
var row = sheet.GetRow(rowNumber++);
cell = row.CreateCell(i);
cell.SetCellValue(new XSSFRichTextString(value));
cell.CellStyle = cellStyle;
}
Этот код в настоящее время производит желаемый результат. Я также добавил XSSRichTextString для форматирования только для хорошей меры.
Я пометил этот в качестве решения, хотя оба имеют правильный ответ (они не позволяют, чтобы отметить второй один). Решение состояло в том, что ячейка должна была быть переименована после того, как значение было введено в нее. Я был в какой-то момент стилизации клеток индивидуально, но до того, как клетки имели значение, помещенное в них. –