2017-08-18 6 views
0

J'utilise NPOI Excel Library pour générer un fichier Excel, dans ce fichier Excel je suis définir explicitement le type de colonne pour les colonnes telles que la date, chaîne, etc.NPOI ensemble explicite colonne Type ne fonctionne pas correctement

Im en utilisant la code suivant pour réaliser ceci.

var row = sheet.CreateRow(currentNPOIRowIndex++); 
        for (var colIndex = 0; colIndex < exportData.Columns.Count; colIndex++) 
        { 
         ICell cell = null; 
         cell = row.CreateCell(colIndex); 
         if (exportData.Columns[colIndex].DataType == typeof(DateTime)) 
         { 
          if (exportData.Rows[rowIndex][colIndex].ToString() != "") 
          { 
           cell.SetCellValue((DateTime)exportData.Rows[rowIndex][colIndex]); 
           cell.CellStyle = (NPOI.HSSF.UserModel.HSSFCellStyle)book.CreateCellStyle(); 
           cell.CellStyle.DataFormat = book.CreateDataFormat().GetFormat("yyyyMMdd HH:mm:ss"); 
           cell = null; 
          } 
          else 
           cell.SetCellValue(exportData.Rows[rowIndex][colIndex].ToString()); 
         } 
         else 
          cell.SetCellValue(exportData.Rows[rowIndex][colIndex].ToString()); 
        } 
       } 

Le code ci-dessus fonctionne bien pour 42 lignes à-dire qu'il correctement défini le type de colonne, mais après 42 lignes Type de colonne ne s'applique pas.

Toute aide sera grandement appréciée.

+0

pouvez-vous essayer le dernier code. Je vous ai fourni ma solution réalisable. Merci. –

Répondre

0

Vous devrez définir un style de colonne par défaut si vous souhaitez définir le format de colonne pour toutes les cellules de cette colonne. S'il vous plaît voir l'exemple ci-dessous du format xssf. La syntaxe peut différer pour votre format hssf mais cela vous donnera une idée de ce qui vous manque.

Je vous fournis de mon code de travail. J'utilise NPOI version 2.2.1.0. pouvez-vous commenter la ligne // cellule = null;

XSSFWorkbook workbook = new XSSFWorkbook(); 
    XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("Template"); 

    XSSFFont defaultFont = (XSSFFont)workbook.CreateFont(); 
    defaultFont.FontHeightInPoints = (short)10; 

    XSSFCellStyle headerStyle = (XSSFCellStyle)workbook.CreateCellStyle(); 
    headerStyle.WrapText = true; 

    XSSFCellStyle defaultStyle = (XSSFCellStyle)workbook.CreateCellStyle(); 
    XSSFDataFormat defaultDataFormat = (XSSFDataFormat)workbook.CreateDataFormat(); 
    defaultStyle.SetDataFormat(defaultDataFormat.GetFormat("000-000-0000")); 
    defaultStyle.FillBackgroundColor = IndexedColors.LightYellow.Index;     
    defaultStyle.FillForegroundColor = IndexedColors.LightTurquoise.Index; 
    defaultStyle.SetFont(defaultFont); 

    var row = sheet.CreateRow(0); 
    for (int headerCount = 0; headerCount < headers.Count(); headerCount++) 
    { 
     row.CreateCell(headerCount).SetCellValue(headers[headerCount]); 
     row.Cells[headerCount].CellStyle = headerStyle; 
     sheet.SetDefaultColumnStyle(headerCount, defaultStyle);   
    } 
+0

J'ai essayé votre solution mais toujours le même problème existe, le format s'applique jusqu'à 42 lignes. –