none
ClosedXML escribir celda y no cambiar formato RRS feed

  • 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

    martes, 30 de octubre de 2018 22:40

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
    martes, 30 de octubre de 2018 23:18

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

    martes, 30 de octubre de 2018 23:03
  • pues aun usando el 

    item.Fecha.ToString("yyyy/MM/dd");

    lo sigue volteando en el excel

    lo pone día mes año

    y no se por que??


    martes, 30 de octubre de 2018 23:14
  • 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
    martes, 30 de octubre de 2018 23:18