2016-02-29 5 views
2

Я пытаюсь создать столбец с 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 для форматирования только для хорошей меры.

ответ

3

Комплект «CellStyle.WrapText» После привязки CellStyle его работа для меня.

Решение:

ICellStyle CellCentertTopAlignment = workbook.CreateCellStyle(); 
CellCentertTopAlignment = workbook.CreateCellStyle(); 
CellCentertTopAlignment.SetFont(fontArial16); 
CellCentertTopAlignment.Alignment = HorizontalAlignment.Center; 
CellCentertTopAlignment.VerticalAlignment = VerticalAlignment.Top; 

ICell Row1 = Row1.CreateCell(1); 
Row1.SetCellValue(new HSSFRichTextString("I find a solution for this Problem..")); 
Row1.CellStyle = CellCentertTopAlignment; 
Row1.CellStyle.WrapText = true; 
+0

Я пометил этот в качестве решения, хотя оба имеют правильный ответ (они не позволяют, чтобы отметить второй один). Решение состояло в том, что ячейка должна была быть переименована после того, как значение было введено в нее. Я был в какой-то момент стилизации клеток индивидуально, но до того, как клетки имели значение, помещенное в них. –

1

Я думаю, вы забыли изменить стиль ячейки. Вы устанавливаете его только в заголовке.

Это:

row.CreateCell(0).SetCellValue(member.FullName); 
row.CreateCell(3).SetCellValue(member.endowed_professorship); 

Должно быть что-то вроде:

var cell0 = row.CreateCell(0); 
cell0.SetCellValue(member.FullName); 
cell0.Style = style; 

var cell3 = row.CreateCell(3); 
cell3.SetCellValue(member.endowed_professorship); 
cell3.Style = style; 

Там, наверное, лучший способ сделать это; Я не специалист по НКОИ. =)

Смежные вопросы