对于大型工作表,GetOleDbSchemaTable列速度较慢

时间:2015-11-25 19:48:00

标签: c# excel schema oledb

我使用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];
}

0 个答案:

没有答案