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

(当然,你必须修改这个以适应你的MultiDimDictListtypes;在我假设如何加载列表和行数据的地方将样本当作伪代码处理)

然后就打电话

 range.LoadFromArrays(GetAsEnumerable(Matrix)); 

当然,你也可以使用LoadFromCollection ,它相当方便。 但是您必须为数据使用与MultiDimDictList不同的类。 例如, DataTable类应该做得很好:)