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

我做错了什么?

C#: EPPLUS: LoadFromCollection

我相信在您的情况下,使用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类应该做得很好:)

相关文章:
  • 没有找到相关文章