C#: EPPLUS: LoadFromCollection
本文关键字:LoadFromCollection EPPLUS | 更新日期: 2023-09-27 17:54:24
我创建了一个名为Table的多维列表,打算将其导出为excel工作表。但是,当我使用LoadFromCollection方法时,生成的excel工作表只显示以下信息:
Key Value Item
File System.Collections.Generic.List`1[System.String]
Filter System.Collections.Generic.List`1[System.String]
Date System.Collections.Generic.List`1[System.String]
实际上,每个列表有168项(形成一个169x3的数组,包括头)。
代码如下:
private void button4_Click(object sender, EventArgs e)
{
MultiDimDictList Table = new MultiDimDictList();
Table.Add("File", new List<string>());
Table.Add("Filter", new List<string>());
Table.Add("Date", new List<string>());
// IN THIS PART I POPULATE THE TABLE
ExportToExcel(Table, @"c:'2.xlsx");
}
public void ExportToExcel(MultiDimDictList Matrix, string sourceFiles)
{
FileInfo targetFile = new FileInfo(sourceFiles);
using (var excelFile = new ExcelPackage(targetFile))
{
var worksheet = excelFile.Workbook.Worksheets.Add("Tables");
var range = worksheet.Cells[2, 2];
range.LoadFromCollection(Collection: Matrix, PrintHeaders: true);
excelFile.Save();
}
}
我做错了什么?
我相信在您的情况下,使用LoadFromArrays
方法会好得多。
LoadFromCollection
需要某种类型的IEnumerable
。相反,你给它一个包含三个列表的类型。
使用LoadFromArrays
,您可以这样做:
IEnumerable<object[]> GetAsEnumerable(MultiDimDictList table)
{
yield return table.Columns.Select(i => (object)i.Name).ToArray();
foreach (var row in table)
{
yield return table.Columns.Select(i => (object)row[i.Name]).ToArray();
}
}
(当然,你必须修改它以适应你的MultiDimDictList
类型;将示例视为伪代码,其中我假设如何加载列列表和行数据)
然后调用
range.LoadFromArrays(GetAsEnumerable(Matrix));
当然,您也可以使用LoadFromCollection
,它相当方便。但是您必须为数据使用与MultiDimDictList
不同的类。例如,DataTable
类应该做得很好:)