c# excel epplus

c# - Columna de fecha de Excel que devuelve INT usando EPPlus



epplus c# (2)

Así que estoy usando EPPlus para leer y escribir documentos de Excel.

Flujo de trabajo

  • El usuario genera un documento de Excel rellenado
  • Abre el documento y agrega una fila.
  • Subido y leído

Las fechas que se generan cuando creo el documento con EPPlus se muestran correctamente cuando leo el valor, pero la fila en la que el usuario cambia la fecha que uno o agrega se muestra como un valor INT, no algo que pueda usar como una fecha real.

Cuando ingreso la fecha 1/01/2014 y la escribo, la salida cuando abro el archivo muestra 41640

Lo estoy leyendo de la siguiente manera

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value != null ? sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value.ToString().Trim() : string.Empty

Actualizar

Al exportar el archivo he añadido lo siguiente

DateTime testDate; if (DateTime.TryParse(split[i], out testDate)) { sheet.Cells[row, i + 1].Style.Numberformat.Format = "MM/dd/yyyy"; sheet.Cells[row, i + 1].Value = testDate.ToString("MM/dd/yyyy"); }

También al leer el valor de vuelta he intentado

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Style.Numberformat.Format = "MM/dd/yyy";

Todavía tengo un INT de vuelta


... cuando necesito leer ese archivo de Excel, las únicas fechas que son incorrectas son las que el usuario ha cambiado

Entonces, cuando lee la hoja de Excel modificada, las fechas modificadas son números, mientras que los valores que no se modifican son cadenas en su formato de fecha.

Puede obtener DateTime través de DateTime.FromOADate :

long dateNum = long.Parse(worksheet.Cells[row, column].Value.ToString()); DateTime result = DateTime.FromOADate(dateNum);

Con su número de muestra:

Console.Write(DateTime.FromOADate(41640)); // -> 01/01/2014


También puede cambiar la propiedad ''NumberFormatLocal''. Esto funcionó para mí. Si formatea el archivo de Excel antes de imprimirlo con EPPLUS.

El siguiente ejemplo básico de código de formatos de la columna A en un archivo de Excel típico.

Sub ChangeExcelColumnFormat() Dim ExcelApp As Excel.Application Dim ExcelWB As Excel.Workbook Dim ExcelWS As Excel.Worksheet Dim formatRange As Excel.Range Dim strFile As String = "C:/Test.xlsx" Dim strSheetname As String = "Sheet1" ExcelApp = New Excel.Application ExcelWB = ExcelApp.Workbooks.Open(strFile) strColSelect = "A:A" strFormat = "dd/mm/yyyy" formatRange = ExcelWS.Range(strColSelect) formatRange.NumberFormatLocal = strFormat ExcelWB.Save() ExcelWB.Close() ExcelApp.Quit() ExcelWS = Nothing ExcelWB = Nothing ExcelApp = Nothing

End Sub