读取打开的Excel文件时出现OleDBException异常。

3

我有一个Excel文件和对它的OleDb连接。当在Windows中打开文件并读取数据时,会在Adapter.Fill方法处抛出以下错误:

然而,当文件没有手动打开时,代码运行良好。

private System.Data.DataSet GetExcelData()
{
    // Create new DataSet to hold information from the worksheet.
    System.Data.DataSet objDataset1 = new System.Data.DataSet();
    DataTable dt = new DataTable();
    try
    {
        string path = ConfigurationManager.AppSettings["ExcelFilePath"];
        //string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";

        OleDbConnection objConn = new OleDbConnection(connectionString);
        objConn.Open();

        //String strConString = "SELECT * FROM [Data Version5.2$A2:ZZ] where [Status] = 'aa'";//Status
        String strConString = "SELECT * FROM [Data Version5.2$A2:ZZ] where [Status] IS NULL OR [Status]='SubReport'";//Status SubReport

        OleDbCommand objCmdSelect = new OleDbCommand(strConString, objConn);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();

        // Pass the Select command to the adapter.  
        objAdapter1.SelectCommand = objCmdSelect;

        // Fill the DataSet with the information from the work sheet.
        objAdapter1.Fill(objDataset1, "ExcelData");

        objConn.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return objDataset1;
}

错误信息是:

在此输入图片描述


4
然而,当文件没有被手动打开时,代码能够正常运行。可能与此问题相似:在其他进程使用Excel文件时,使用OleDB c#读取文件 - Pradeep Kumar
你解决了吗? - Joel Peltonen
是的,Sid的解决方案对我有用。 - Shashank Srivastava
1个回答

4

假设您不需要向文件中写入内容,尝试调整连接字符串以包括只读模式(Mode=Read)。在我所有不需要向文件中写入内容的情况下,我都使用了这个模式,我从已经打开的工作簿中读取数据时从未遇到过问题:

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
    path + ";Mode=Read;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";

另外,我通常不会将Excel文件读取为XML,因此我的连接字符串的扩展属性是Excel 12.0;HDR=YES;IMEX=1;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接