LoadFromCollection
Grundsätzlich können Sie Generics als die Quellensammlung verwenden, die IEnumerable<T>
implementiert, und die Funktion verwendet den T
-Typ aus dieser Sammlung. Also, sagen wir, ein List
von thingy
Objekte können davon konsumiert werden. Hier ist ein Thread, der es zeigt:
EPPlus - LoadFromCollection - Text converted to number
Die Sammlung datalist
ist
var datalist = new List<TestObject>();
geben wird in die Funktion
worksheet.Cells.LoadFromCollection(datalist);
Was die Überlastungen, die längste (der eine, die du zeigst) nimmt das MemberInfo
's des T
Objekts als den letzten Parameter. Wenn Members
null ist (über die anderen Überlastungen) es tut einfach
Members = type.GetProperties(memberFlags);
wo type
ist
var type = typeof(T);
können Sie Ihre eigenen liefern, aber es ist selten notwendig, wenn Sie einige sehr spezifische tun. Das obige memberFlags
ist die typischen Public
und Instance
Eigenschaftstypen (wieder nicht normalerweise notwendig, um Ihre eigenen zu liefern).
Wenn Sie eine bessere Vorstellung davon bekommen Sie die Quelle doe hier Prüfung können:
http://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelRangeBase.cs
Reaktion auf die Kommentare
Hier ist ein gutes Beispiel für die Frage:
public class TestObject
{
public int Col1 { get; set; }
public int Col2 { get; set; }
public string Col3 { get; set; }
public DateTime Col4 { get; set; }
}
[TestMethod]
public void LoadFromCollection_MemberList_Test()
{
//https://stackoverflow.com/questions/32587834/epplus-loadfromcollection-text-converted-to-number/32590626#32590626
var TestObjectList = new List<TestObject>();
for (var i = 0; i < 10; i++)
TestObjectList.Add(new TestObject {Col1 = i, Col2 = i*10, Col3 = (i*10) + "E4"});
//Create a test file
var fi = new FileInfo(@"c:\temp\LoadFromCollection_MemberList_Test.xlsx");
if (fi.Exists)
fi.Delete();
using (var pck = new ExcelPackage(fi))
{
//Do NOT include Col1
var mi = typeof (TestObject)
.GetProperties()
.Where(pi => pi.Name != "Col1")
.Select(pi => (MemberInfo)pi)
.ToArray();
var worksheet = pck.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromCollection(
TestObjectList
, true
, TableStyles.Dark1
, BindingFlags.Public| BindingFlags.Instance
, mi);
pck.Save();
}
}
Beachten Sie, dass Col1
ist nicht in der Ausgabe:
Das gerade versenkt in „es ist selten notwendig, wenn Sie einige sehr spezifische tun“. Haben Sie aus Neugierde ein Beispiel dafür, was für eine spezifische Sache möglich wäre? –
@Rubix_Revenge Ich erinnere mich nicht an alles, aber es macht nur eine Sammlung von 'MemberInfo' über Reflektionen von allen Eigenschaften des Public- und Instance-Typs. Ich könnte also sehen, dass es nützlich ist, wenn, zum Beispiel, Ihr 'T'-Objekt ein Dutzend Eigenschaften hat, aber Sie möchten, dass bestimmte in Ihrer Ausgabe enthalten sind. Sie könnten Ihr eigenes Array von 'MemberInfos' generieren, so dass Epplus nur diese in der Ausgabe enthält. – Ernie
@Rubix_Revenge Fühlte sich so an, als ob meine Antwort ein wenig fehlte, weil ich kein richtiges Beispiel lieferte, siehe oben. – Ernie