EPPlus Zelle Date-Datentyp Funktioniert Nicht

Ich habe einige code, der akzeptiert eine IEnumerable-Schnittstelle und generiert ein Excel-Dokument aus. Die Objekte in die IEnumerable-ein date-Feld, und ich will diese formatiert werden, wie Daten in Excel. Allerdings, wenn man es in Excel, die Daten scheinen nicht zu den "date" Datentyp, bis Sie klicken Sie doppelt in die Zelle, drücken Sie dann die EINGABETASTE. Wenn Sie das tun, werden die Werte bewegt sich nach rechts gerechtfertigt und der Tabelle Filter, die richtig funktionieren. Wenn Sie nicht tun, doppelklicken Sie und geben Sie, was der Wert ist Linksbündig ausgerichtet und Tabelle filtern behandeln Sie es als text statt einem Datum. Ich muss Excel, um es zu behandeln, wie ein Datum aus der box.

Hier ist mein code.

///<summary>
///Converts any IEnumerable to an Excel Document. Objects appear in the order declared in the class.
///</summary>
///<typeparam name="T">Any object.</typeparam>
///<param name="objects">List of objects to generate document from.</param>
///<returns>Byte array representing a .xlsx file.</returns>
public static byte[] ToExcelDocument<T>(this IEnumerable<T> objects)
{
    int currentrow = 1;
    Type type = typeof(T);
    List<PropertyInfo> propertyinfos = type.GetProperties().ToList();
    int numcolumns = propertyinfos.Count;
    ExcelPackage pck = new ExcelPackage();
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add(type.Name + "(s)");

    for (int i = 0; i < numcolumns; i++)
    {
        ws.Cells[currentrow, i + 1].Value = propertyinfos[i].Name;
    }
    currentrow++;
    foreach (object o in objects)
    {
        for (int i = 0; i < propertyinfos.Count; i++)
        {
            if (o.GetType().GetProperty(propertyinfos[i].Name).PropertyType == typeof(DateTime))
            {
                ws.Cells[currentrow, i + 1].Style.Numberformat.Format = "m/d/yyyy";
                DateTime dt = (DateTime)(o.GetType().GetProperty(propertyinfos[i].Name).GetValue(o, null));
            }
            else if (o.GetType().GetProperty(propertyinfos[i].Name).PropertyType == typeof(DateTime?))
            {
                DateTime? dt = (DateTime?)(o.GetType().GetProperty(propertyinfos[i].Name).GetValue(o, null));
                if (dt.HasValue)
                {
                    ws.Cells[currentrow, i + 1].Style.Numberformat.Format = "m/d/yyyy";
                    ws.Cells[currentrow, i + 1].Value = dt.Value.ToString("MM/dd/yyyy");
                }
            }
            else
            {
                ws.Cells[currentrow, i + 1].Value = o.GetType().GetProperty(propertyinfos[i].Name).GetValue(o, null);
            }
        }
        currentrow++;
    }

    ExcelAddressBase eab = new ExcelAddressBase(1, 1, currentrow - 1, numcolumns);
    ws.Tables.Add(eab, "MyTable");
    ws.Tables["MyTable"].TableStyle = OfficeOpenXml.Table.TableStyles.Medium15;
    ws.Cells.AutoFitColumns();
    MemoryStream ms = new MemoryStream();
    pck.SaveAs(ms);
    return ms.ToArray();
}

Ich würde denken, dass ws.Cells[currentrow, i + 1].Style.Numberformat.Format = "m/d/yyyy"; genug wäre, das zu erreichen, was ich will, aber es scheint nicht zu funktionieren. Wenn Sie mit der rechten klicken Sie auf die Zelle in Excel, und gehen Sie zu Format-Zellen, zeigt sich, dass Datum ausgewählt, aber es scheint nicht zu funktionieren für Tabelle Filter. Statt "Sortieren älteste bis neueste" bekomme ich "Sortieren von a bis z".

InformationsquelleAutor mason | 2014-05-22
Schreibe einen Kommentar