C#:EPPLUS:LoadFromCollection
我创build了一个名为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个项目(制作一个169×3的数组,包括标题)。
这是代码。
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
需要某种types的IEnumerable
。 相反,你给它一个有三个列表的types。
使用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
types;在我假设如何加载列表和行数据的地方将样本当作伪代码处理)
然后就打电话
range.LoadFromArrays(GetAsEnumerable(Matrix));
当然,你也可以使用LoadFromCollection
,它相当方便。 但是您必须为数据使用与MultiDimDictList
不同的类。 例如, DataTable
类应该做得很好:)