将List<custom>转换为Excel c#

10

有人能帮助我吗?

我有一个结构。

    public struct Data
    {

        public string aaaAAA;          
        public string bbbBBB;          
        public string cccCCC; 
        ...
        ...
     }

然后将一些代码引入数据到一个列表中,创建新的列表等。

我想将这个数据传输到 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;
        }

这个方法可以实现,但速度非常慢。我正在输入超过12,000行数据,我的结构有85个元素(因此每行有85列数据)。

有没有人可以帮助加快速度呢?

谢谢, Timujin


你尝试过使用OleDB或报表将其写入Excel文件吗? - NDraskovic
1
如果你正在使用Excel 2007或更高版本,那么你可能需要了解一下OpenXml。 - juharr
我尝试过两者都不行...我是C#的新手。 - Timujin
尝试使用EPPlus:http://epplus.codeplex.com/ - Ahmed KRAIEM
@AhmedKRAIEM;看起来真的很复杂 :-( - Timujin
1个回答

24
如果像@juharr提到的那样,您可以使用OpenXML,请查看ClosedXML库以创建Excel文档,可在此处找到:here
使用您上面的示例,您可以使用以下代码:
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");

如果您需要标题行,则只需手动添加它们,使用类似以下内容的东西(然后你可以从第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];
}

从性能要求来看,这种方法比遍历数组更高效。我在自己的测试中进行了一些基本的测试,对于包含2个属性的样本对象插入20,000行总共只用了1秒钟。


2
我简直无法相信你用几行代码就完成了这个任务!非常感谢……顺便问一句,你们是怎么学习编程的啊?我看过很多书,但感觉还是毫无头绪!!! - Timujin
我可以使用我的List对象创建Excel,但是如何创建带有标题的Excel呢? - Velkumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接