web-dev-qa-db-ja.com

`LoadFromCollection <T>(IEnumerable <T>、Boolean、TableStyles、BindingFlags、MemberInfo [])`のEpplusの例

Epplus ExcelPackageを使用する場合、通常、次のように、基本的なLoadFromCollection関数を使用してワークシートにデータを入力します。

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

このサイト に、その関数の他のオーバーロードのリストが表示されますが、具体的な例はありません。これは面白そうだ。誰かが使用中のこの関数のオーバーロードの基本的な例を提供できますか?

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

APIをクリックすると、「 TableStyles "は次のように割り当てることができる列挙型であることがわかります。

TableStyles TableStyle = OfficeOpenXml.Table.TableStyles.Medium1;

memberFlagsおよびMembersパラメーターは私には謎のままです。

6
user4864716

LoadFromCollectionを使用すると、基本的にIEnumerable<T>を実装するソースコレクションとしてジェネリックスを使用でき、関数はそのコレクションのT型を使用します。したがって、たとえば、Listオブジェクトのthingyを消費することができます。これを示すスレッドは次のとおりです。

EPPlus-LoadFromCollection-テキストを数値に変換

コレクションdatalist

var datalist = new List<TestObject>();

関数に渡されます

worksheet.Cells.LoadFromCollection(datalist);

オーバーロードに関しては、最も長いもの(表示するもの)は、最後のパラメーターとしてMemberInfoオブジェクトのTを取ります。 Membersが(他のオーバーロードを介して)nullの場合、単純に

Members = type.GetProperties(memberFlags);

ここで、type

var type = typeof(T);

あなたはあなた自身を供給することができます、しかしあなたがいくつかの非常に特定をしているのでない限りそれはめったに必要ではありません。上記のmemberFlagsは、一般的なPublicおよびInstanceプロパティタイプです(通常、独自のプロパティタイプを提供する必要はありません)。

これについてより良いアイデアを得たい場合は、ここでソースdoeをチェックアウトできます。

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();
    }
}

Col1が出力に含まれていないことに注意してください。

enter image description here

11
Ernie S