Epplus的例子`LoadFromCollection <T>(IEnumerable <T>,Boolean,TableStyles,BindingFlags,MemberInfo [])`

6 c# epplus

使用Epplus ExcelPackage时,我通常使用基本LoadFromCollection函数来填充工作表,就像这样:

worksheet.Cells[1, 1].LoadFromCollection(Collection:data, PrintHeaders:true);
Run Code Online (Sandbox Code Playgroud)

这个网站上,我看到了该函数的其他重载列表,但没有具体的例子.这个看起来很有趣.有人可以提供使用此函数重载的基本示例吗?

LoadFromCollection<T>(IEnumerable<T> Collection, Boolean PrintHeaders,
      TableStyles TableStyle, BindingFlags memberFlags, MemberInfo[] Members)
Run Code Online (Sandbox Code Playgroud)

我可以通过点击API看到" TableStyles "是一个可以像这样分配的枚举:

TableStyles TableStyle = OfficeOpenXml.Table.TableStyles.Medium1;
Run Code Online (Sandbox Code Playgroud)

这些memberFlagsMembers参数对我来说仍然是一个谜.

Ern*_*e S 10

LoadFromCollection基本上允许您使用Generics作为实现的源Collection,IEnumerable<T>函数将使用该T集合中的类型.所以,比方说,它可以消耗List一些thingy物体.这是一个演示它的线程:

EPPlus - LoadFromCollection - 文本转换为数字

这个系列datalist

var datalist = new List<TestObject>();
Run Code Online (Sandbox Code Playgroud)

传递给函数

worksheet.Cells.LoadFromCollection(datalist);
Run Code Online (Sandbox Code Playgroud)

至于重载,最长的一个(你展示的那个)将对象的MemberInfo's T作为最后一个参数.如果Members为null(通过其他重载),它只是

Members = type.GetProperties(memberFlags);
Run Code Online (Sandbox Code Playgroud)

这里type

var type = typeof(T);
Run Code Online (Sandbox Code Playgroud)

您可以自己提供,但除非您正在做一些非常具体的事情,否则很少需要.以上memberFlags是典型PublicInstance属性类型(通常不需要提供自己的).

如果您想更好地了解这一点,可以在这里查看源代码:

http://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelRangeBase.cs

对评论的回应

以下是与该问题相关的正确示例:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,Col1不在输出中:

在此输入图像描述