Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:EPPLUS:LoadFromCollection_C#_Excel_List_Epplus - Fatal编程技术网

C#:EPPLUS:LoadFromCollection

C#:EPPLUS:LoadFromCollection,c#,excel,list,epplus,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

我创建了一个名为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();
    }
}
private void按钮4\u单击(对象发送者,事件参数e)
{
MultiDimDictList表=新的MultiDimDictList();
Table.Add(“文件”,新列表());
添加(“过滤器”,新列表());
表.添加(“日期”,新列表());
//在这一部分中,我填充表格
ExportToExcel(表@“c:\2.xlsx”);
}
public void ExportToExcel(多维目录列表矩阵、字符串源文件)
{
FileInfo targetFile=新的FileInfo(sourceFiles);
使用(var excelFile=new ExcelPackage(targetFile))
{
var worksheet=excelFile.Workbook.Worksheets.Add(“表格”);
变量范围=工作表。单元格[2,2];
range.LoadFromCollection(集合:矩阵,打印头: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();
  }
}

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

实际上,它让我了解了如何加载范围。我终于设法填充了这个范围。谢谢对于最近发布的EPPlus v4,使用
LoadFromCollection
有一个优势,即
DisplayName
属性可用于格式化列标题。
range.LoadFromArrays(GetAsEnumerable(Matrix));