Principales respuestas
ClosedXML escribir celda y no cambiar formato

Pregunta
-
tengo un excel en donde hay dos columnas la columna fecha = C2 y la columna hora = D2
de la fila 3 en adelante tienen valores así
C2 D2
2018/10/22 20:00:02 2018/10/22 20:00:03 2018/10/22 20:00:04 2018/10/22 20:00:05 si veo el excel viene con formato de excel texto y no me molesta eso
yo en código uso el método getDatetime y funciona como lo muestro
DateTime fecha; if (row.Cell(3).TryGetValue(out fecha)) { checada.FechaHora = fecha; checada.Fecha = row.Cell(3).GetString(); } else { checada.Fecha = row.Cell(3).GetString(); checada.Validaciones += "Error: El campo fecha debe tener el siguiente formato YYYY/MM/DD " + '\n'; fechaEsCorrecto = false; } DateTime hora; if (row.Cell(4).TryGetValue(out hora)) { checada.FechaHora.AddHours(hora.Hour); checada.FechaHora.AddMinutes(hora.Minute); checada.FechaHora.AddSeconds(hora.Second); checada.Hora = row.Cell(4).GetString(); }
el problema es cuando genero un excel yo, lo hago con este codigo
foreach (var item in checadas) { numeroFila++; hoja.Cell("B" + numeroFila.ToString()).Value = item.SapId; hoja.Cell("C" + numeroFila.ToString()).SetDataType(XLDataType.Text).Value = item.Fecha; hoja.Cell("D" + numeroFila.ToString()).SetDataType(XLDataType.Text).Value = item.Hora; hoja.Cell("E" + numeroFila.ToString()).Value = item.Planta; hoja.Cell("F" + numeroFila.ToString()).Value = item.Validaciones; if (item.Validaciones == "OK") { hoja.Cell("F" + numeroFila.ToString()).Style.Font.FontColor = XLColor.Green; } else { hoja.Cell("F" + numeroFila.ToString()).Style.Font.FontColor = XLColor.Red; } }
el campo fecha sale volteado sale asi
22/10/2018 y el campo d2 se ve igual 20:00:02
pero cuando lo intento convertir a datetime con las mismas lineas de codigo que converti el otro no puede hacerlo
como puedo crear un excel idéntico al que recibi
Respuestas
-
si revisas las propiedades de esa celda, que formato esta aplicando ? porque puede que el propio excel la detecte como fecha y le aplique el formato de USA que justamente es MM/dd/yyyy
https://github.com/ClosedXML/ClosedXML/wiki/Data-Types
valida lo que comenta aqui cuando dice "DateTime as Text" como asigna el valor a la celda, le pine una comilla simple
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta niqel jueves, 1 de noviembre de 2018 20:54
Todas las respuestas
-
hola
>>pero cuando lo intento convertir a datetime con las mismas lineas de codigo que converti el otro no puede hacerlo
que significa que no puedes hacerlo ? no convierte la fecha de string a datetime
que pasa si usas
hoja.Cell("C" + numeroFila.ToString()).SetDataType(XLDataType.Text).Value = item.Fecha.ToString("yyyy/MM/dd");
para darle el mismo formato que mencionas al principio
esto aplica si item.Fecha es un DateTime
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
si revisas las propiedades de esa celda, que formato esta aplicando ? porque puede que el propio excel la detecte como fecha y le aplique el formato de USA que justamente es MM/dd/yyyy
https://github.com/ClosedXML/ClosedXML/wiki/Data-Types
valida lo que comenta aqui cuando dice "DateTime as Text" como asigna el valor a la celda, le pine una comilla simple
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta niqel jueves, 1 de noviembre de 2018 20:54