2016-06-19 5 views
3

Wenn Epplus ExcelPackage verwenden, ich verwenden in der Regel eine grundlegende LoadFromCollection Funktion ein Arbeitsblatt zu füllen, wie auf diese Weise:Epplus Beispiel `LoadFromCollection <T> (IEnumerable <T>, Boolean, Table, Binding, Member [])`

worksheet.Cells[1, 1].LoadFromCollection(Collection:data, PrintHeaders:true); 

Auf , sehe ich die Auflistung von anderen Überladungen dieser Funktion, aber keine spezifischen Beispiele. Dieser sieht interessant aus. Kann jemand ein grundlegendes Beispiel für diese Funktionsüberlastung im Gebrauch geben?

LoadFromCollection<T>(IEnumerable<T> Collection, Boolean PrintHeaders, 
     TableStyles TableStyle, BindingFlags memberFlags, MemberInfo[] Members) 

kann ich durch einen Klick über die API, dass „TableStyles“ ist eine Enumeration, die wie so zugeordnet werden kann:

TableStyles TableStyle = OfficeOpenXml.Table.TableStyles.Medium1; 

Die memberFlags und Members Parameter bleibt mir ein Rätsel.

Antwort

6

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:

enter image description here

+0

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? –

+0

@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

+1

@Rubix_Revenge Fühlte sich so an, als ob meine Antwort ein wenig fehlte, weil ich kein richtiges Beispiel lieferte, siehe oben. – Ernie

Verwandte Themen