Problema al escribir una date en un file Excel usando NPOI

Actualmente estoy usando NPOI para generar files de Excel basados ​​en una database de mi aplicación asp.net mvc. Ya casi termino con el código, excepto un pequeño problema que sigo recibiendo cuando bash escribir dates en Excel.

En la database (MS SQL Server) tengo la date guardada como 41883, 41913 etc … que en C # I puedo convertir a un object DataTime usando

DateTime dt = DateTime.FromOADate(Convert.ToDouble(41883)); 

El código que uso para escribir la date en Excel parece mentir esto:

 var cell = excelRow.CreateCell(columnIndex); IDataFormat format = workbook.CreateDataFormat(); short dateFormat = format.GetFormat("dd/MM/yyyy"); cell.SetCellValue(DateTime.FromOADate(Convert.ToDouble(dbDateValue))); ICellStyle cellStyle = workbook.CreateCellStyle(); cellStyle.DataFormat = dateFormat; cell.CellStyle = cellStyle; 

esto es solo una muestra de mi código (la pieza que está haciendo la parte de escritura de la date). El problema con este fragment de código es que solo una parte de las celdas de date están formateadas como date, para todas las demás todavía veo los valores como en la database 41883, 41913, etc. que por supuesto puedo seleccionar y aplicar Fecha corta / Formato de date desde Excel (pero no quiero eso).

¿Alguien podría decirme por qué podría aparecer un comportamiento así (el formatting funciona solo para parte de las células) … Incluso traté de usar el formatting HSSFDataFormat.GetBuiltinFormat ("Fecha") pero ninguna de las celdas se formateó en ese caso.

enter image description here

La image de arriba explica mejor mi problema … cuando selecciono las primeras celdas en la primera columna, veo que la celda está formateada como "Personalizada" … para todos los demás valores que no están formateados, es General. Una vez que selecciono las celdas, puedo formatearlo como date de Excel sin ningún problema. Esto es extraño ya que se ejecuta el mismo código para todas las celdas de date, pero solo algunas obtienen el formatting correcto …

¡Cualquier idea o sugerencia será apreciada!

¡Gracias!

Andrei

No hay necesidad de convertir nada. Debes crear un estilo y aplicarlo a tu celular

  var newDataFormat = workbook.CreateDataFormat(); var style = workbook.CreateCellStyle(); style.BorderBottom = BorderStyle.Thin; style.BorderLeft = BorderStyle.Thin; style.BorderTop = BorderStyle.Thin; style.BorderRight = BorderStyle.Thin; style.DataFormat = newDataFormat.GetFormat("MM/dd/yyyy HH:mm:ss"); foreach (var objArticles in tempArticles) { //Create a new Row var row = sheet.CreateRow(rowNumber++); //Set the Values for Cells row.CreateCell(0).SetCellValue(objArticles.ProjectId); row.CreateCell(1).SetCellValue(objArticles.ProjectName); row.CreateCell(2).SetCellValue(objArticles.MetricDescription); row.CreateCell(3).SetCellValue(objArticles.MetricValue); var cell = row.CreateCell(4); cell.SetCellValue(objArticles.BuildDate); cell.CellStyle = style; var cell5 = row.CreateCell(5); cell5.SetCellValue(objArticles.CreateDate); cell5.CellStyle = style; }