gpt4 book ai didi

c# - epplus 使用匿名类型的 LoadFromCollection

转载 作者:太空狗 更新时间:2023-10-29 21:27:37 25 4
gpt4 key购买 nike

我有一个 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);

但这会引发异常:

Supplied properties in parameter Properties must be of the same type as 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 行。

但是只有在编译时知道结构时才应该使用匿名类型。

您可以改用 DataTableLoadFromDataTable。由于我不知道您是如何创建匿名类型的,所以我只向您展示了一个小示例:

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

关于c# - epplus 使用匿名类型的 LoadFromCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24534207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com