C#:EPPLUS:LoadFromCollection

时间:2014-03-28 14:31:25

标签: c# excel list epplus

我创建了一个名为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();
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我相信在你的情况下,使用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类应该没问题。)