大多数与Office产品一起使用的编程语言都有一些中间层,这通常是瓶颈所在,一个很好的例子是使用PIA的/互操作或Open XML SDK。
在较低级别(绕过中间层)获取数据的一种方法是使用驱动程序。
150MB的单页Excel文件,大约需要7分钟。
我能做的最好的事情就是在135秒内完成一个130MB的文件,大约快3倍:
Stopwatch sw = new Stopwatch();
sw.Start();
DataSet excelDataSet = new DataSet();
string filePath = @"c:\temp\BigBook.xlsx";
// For .XLSXs we use =Microsoft.ACE.OLEDB.12.0;, for .XLS we'd use Microsoft.Jet.OLEDB.4.0; with "';Extended Properties=\"Excel 8.0;HDR=YES;\"";
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties=\"Excel 12.0;HDR=YES;\"";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbDataAdapter objDA = new System.Data.OleDb.OleDbDataAdapter
("select * from [Sheet1$]", conn);
objDA.Fill(excelDataSet);
//dataGridView1.DataSource = excelDataSet.Tables[0];
}
sw.Stop();
Debug.Print("Load XLSX tool: " + sw.ElapsedMilliseconds + " millisecs. Records = " + excelDataSet.Tables[0].Rows.Count);
Win 7x64, Intel i5, 2.3ghz, 8GB ram, SSD250GB.
如果我也可以推荐硬件解决方案,如果您使用的是标准HDD,请尝试使用SSD来解决它。
注意:我无法下载您的 Excel 电子表格示例,因为我位于企业防火墙后面。
请参阅MSDN - 导入具有200 MB数据的xlsx文件的最快方法,共识是OleDB是最快的。
PS 2.以下是使用python的方法:http://code.activestate.com/recipes/440661-read-tabular-data-from-excel-spreadsheets-the-fast/