2013-12-13 4 views
3

У меня есть файл excel и подключение к нему oledb. При чтении данных, когда файл открывается в окнах, он выдает следующую ошибку (метод Adapter.Fill).OleDBException при чтении открытого файла excel

Однако код работает нормально, когда файл не открывается вручную.

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; 
} 

Сообщение об ошибке

enter image description here

+4

'Однако код работает нормально, когда файл не открывается вручную.' Возможный дубликат файла [Read Excel с OleDB C#, когда он используется другой процесс] (http://stackoverflow.com/questions/18798948/read-excel-file-with-oledb-c-when-it-is-used-by-other-process) –

+0

Удалось ли вам это решить? – Nenotlep

+0

Да, решение Сида работало для меня. –

ответ

3

Предполагая, что вам не нужно писать в файл, попробуйте изменить строку подключения, чтобы включить режим только для чтения (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;

Смежные вопросы