我使用ACE OLEDB连接字符串连接到excel文件。我注意到我的查询(参见下面的示例),当工作表上有更多行数据时,返回列模式需要更长时间才能运行。
对于我的一些较大的工作表(200k行),返回头模式大约需要10秒。有没有办法加快速度,或者更好的方法来获取列标题?
string connectionString = string.Empty;
connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};
Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""", path);
OleDbConnection con = new OleDbConnection(connectionString);
con.Open();
DataTable dtSchema = new DataTable();
System.Diagnostics.Debug.WriteLine("Start: " + DateTime.Now.ToLongTimeString());
dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new Object[] { null, null, WorksheetName, null });
System.Diagnostics.Debug.WriteLine("End: " + DateTime.Now.ToLongTimeString());
con.Close();
更新
我尝试重写这个 - 关闭Headers并手动只读取第一行。处理我的较大文件仍然需要大约10秒钟(小的文件仍然可以很快回来)。还有什么我可以尝试的,可以更快地获得标题(第一行)值吗?
string connectionString = string.Empty;
connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};
Extended Properties=""Excel 12.0 Xml;HDR=NO;""", path);
DataTable dtSchema = new DataTable();
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(String.Format("SELECT * FROM [{0}A1:II1]", WorksheetName),conn);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = command;
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
dtSchema = dataSet.Tables[0];
}