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 列数据)。

任何人都可以帮助使这更快吗?

谢谢,蒂姆金

4

1 回答 1

19

如果@juharr 提到您能够使用 OpenXML,请查看用于创建 Excel 文档的 ClosedXML 库,可在此处找到。

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

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 秒。

于 2013-06-26T15:55:05.507 回答