将<custom>列表到Excel c#

Tim*_*jin 7 c# excel structure list

谁能帮我?

我有一个结构

    public struct Data
    {

        public string aaaAAA;          
        public string bbbBBB;          
        public string cccCCC; 
        ...
        ...
     }
Run Code Online (Sandbox Code Playgroud)

然后一些代码将数据引入List,creaitng新列表等.

我想把它传送到我这样做的excel,

        for (int r = 0; r < newlist.Count; r++)
        {
            ws.Cells[row,1] = newlist[r].aaaAAA;
            ws.Cells[row,2] = newlist[r].bbbBBB;
            ws.Cells[row,3] = newlist[r].cccBBB;
        }
Run Code Online (Sandbox Code Playgroud)

这有效,但速度很慢.我输入超过12,000行,我的结构有85个元素(所以每行有85列数据).

任何人都可以帮助更快?

谢谢,Timujin

Ter*_*nce 10

如果@juharr提到您可以使用OpenXML,请查看ClosedXML库以创建Excel文档,可在此处找到.

使用上面的示例,您可以使用以下代码:

var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Data_Test_Worksheet");
ws.Cell(1, 1).InsertData(newList);
wb.SaveAs(@"c:\temp\Data_Test.xlsx");
Run Code Online (Sandbox Code Playgroud)

如果你需要一个标题行,那么你只需要手动添加它们,使用类似下面的内容(然后你将开始在第2行上面插入你的行):

PropertyInfo[] properties = newList.First().GetType().GetProperties();
List<string> headerNames = properties.Select(prop => prop.Name).ToList();
for (int i = 0; i < headerNames.Count; i++)
{
    ws.Cell(1, i + 1).Value = headerNames[i];
}
Run Code Online (Sandbox Code Playgroud)

在性能要求上,这似乎比迭代数组更有效.我已经做了一些基本的测试,并为包含2个属性的样本对象插入了20 000行,总共需要1秒钟.

  • 我不敢相信你用几行代码就做到了!!!!谢谢一百万... ps.. 你们是如何学习这些东西的,我读了很多书,什么也学不到!!! (2认同)