2016-02-29 203 views
2

我想創建一個WrapText設置爲真正的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工作。

編輯:

張貼的問題後,我修改我的代碼使用反射來分離從各個類的代碼(有幾個和我一起工作)。這使用一個修改後的Kendo界面,在網格上有Excel Export按鈕。

修改後的代碼包括通過包含在答案修改:

   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; 

有可能是一個這樣做的更好的辦法;我不是NPOI專家。 =)