我需要导出大量数据] 100万。这是完成的功能,但是工作非常缓慢。
public void ExportToExcel(string path)
{
var doc = new Excel.Application();
var wb = doc.Workbooks.Add();
Excel._Worksheet ws = (Excel.Worksheet)doc.ActiveSheet;
ws.Cells[1, "A"] = "Дата";
ws.Cells[2, "B"] = "Имя";
ws.Cells[3, "C"] = "Фамилия";
ws.Cells[4, "D"] = "Отчество";
ws.Cells[5, "E"] = "Город";
ws.Cells[6, "F"] = "Страна";
var check = pers.AsNoTracking().ToList();
for (int i = 0; i < check.Count(); i++)
{
ws.Cells[i + 2, "A"] = check.ElementAt(i).Date;
ws.Cells[i + 2, "B"] = check.ElementAt(i).FirstName;
ws.Cells[i + 2, "C"] = check.ElementAt(i).LastName;
ws.Cells[i + 2, "D"] = check.ElementAt(i).SurName;
ws.Cells[i + 2, "E"] = check.ElementAt(i).City;
ws.Cells[i + 2, "F"] = check.ElementAt(i).Country;
}
wb.SaveAs(path);
}
据我了解,List沿这种方式运行了很长时间,我创建了断点,在10秒内只有1000条记录。这非常糟糕。
有没有任何方法可以快速写入Excel。我可以使用其他收藏集吗?我需要达到至少10到20秒的速度才能插入100万个数据。
有两种方法可以加快速度:
使用OLEDB:
System.Data.OleDb.OleDbConnection conn ;
System.Data.OleDb.OleDbCommand cmd = New System.Data.OleDb.OleDbCommand();
String sql = null;
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\path\\to\\excelfile.xls';Extended Properties=Excel 8.0;");
conn.Open();
cmd.Connection = conn;
sql = "Insert into [Sheet1$] (id,name) values('5','e')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
conn.Close();
要使用阵列,您必须先建立阵列:
//10 rows, 5cols
string[,] array = new string[10, 5];
...assign array
Range("A1:E10").value=array;
如上所述,一次编写大型数组比逐行编写要快得多,这在使用excel interop时会非常缓慢。