我有一个IEnumerable<object>
dataSource 其中包含匿名类型的集合。匿名类型的实际结构在设计时是未知的,因此我试图找到一个可以处理任何匿名类型的通用解决方案。
如何将它们加载到 epplus 中以创建电子表格?我有一个名为 ws 的工作表,我尝试过:
ws.Cells["A1"].LoadFromCollection(dataSource, true);
但是,当运行时,它将所有匿名类型的属性输出到单个单元格中:
{ Id = 10000, Title = This is a test }
我尝试使用以下方式传递 MemberInfo:
var members = dataSource.First().GetType().GetMembers();
ws.Cells["A1"].LoadFromCollection(this._dataSource, true,
TableStyles.Medium1, BindingFlags.Public, members);
但这会抛出一个异常:
参数 Properties 中提供的属性必须与 T 具有相同类型
关于如何在 C# 中使用匿名类型创建电子表格有什么建议吗?
我已经测试过
using (var excel = new OfficeOpenXml.ExcelPackage())
{
var sheet = excel.Workbook.Worksheets.Add("Test");
sheet.Cells["A1"].LoadFromCollection(dataSource, true);
excel.SaveAs(new FileInfo(@"C:\Temp\Test.xlsx"));
}
有了这个样本数据:
var dataSource = Enumerable.Range(1, 100).Select(i => new{ ID=i, Title="Title " + i });
效果很好。它创建具有正确标题的两列和 100 行。
但是,只有在编译时知道结构的情况下才应该使用匿名类型。
你可以使用DataTable
and LoadFromDataTable
反而。因为我不知道如何创建匿名类型,所以我只向您展示一个小示例:
DataTable dataSource = new DataTable();
dataSource.Columns.Add("Id"); // default type is string
dataSource.Columns.Add("Title");
// add other columns
dataSource.Rows.Add("1", "Title1");
// add other rows
using (var excel = new OfficeOpenXml.ExcelPackage())
{
var sheet = excel.Workbook.Worksheets.Add("Test");
sheet.Cells["A1"].LoadFromDataTable(dataSource, true);
excel.SaveAs(new FileInfo(@"C:\Temp\Test.xlsx"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)