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
パラメーターは私には謎のままです。
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
が出力に含まれていないことに注意してください。