[英]Exception thrown when opening a Excel spreedsheet from C# stating file is being used by another user
我目前正在開發一個應用程序,該應用程序需要將Excel電子表格(用戶選擇的位置)讀取到DataTable中,然后存儲在sql server數據庫中。
該應用程序可以在我的開發環境中完美運行,但是當將其部署到我的生產環境中時,會引發異常並顯示以下消息。
Microsoft Jet數據庫引擎無法打開文件“ .xls”。 它已經由另一個用戶獨占打開,或者您需要權限才能查看其數據。
我讀取excel文件的代碼如下:
OleDbConnection objConn = null;
DataSet objDataset1 = null;
string fileLocation = GetFileLocation();
string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=" + fileLocation
+ ";" + "Extended Properties=Excel 8.0;";
objConn = new OleDbConnection(sConnectionString);
objConn.Open(); //This is where the exception is thrown
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [Sheet1$]", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
objDataset1 = new DataSet();
objAdapter1.Fill(objDataset1, "XLData");
DataTable dt = objDataset1.Tables["XLData"];
請注意,應用程序和excel文件位於同一域中的不同服務器上。
挖掘各種論壇和知識庫,當“用戶”無權使用該文件時,似乎會引發異常。 盡管不建議將所有用戶對該文件的權限設置為“完全訪問”。
除了文件許可權之外,還有什么可能導致引發此異常?
不確定這是否有幫助,但是...
錯誤:
Microsoft Jet數據庫引擎無法打開文件“ .xls”。
似乎指向一個名為.xls
的文件,而不是一個名為myspreadsheet.xls
或prodfile.xls
。
這可能會花費很長時間,但是您可以進行一些調試以確保Jet試圖打開的文件確實存在嗎? 出於某種原因,可能是文件名構造不正確。
以下是針對相同根本問題的一些答案:
在開始閱讀excel的新過程之前,請殺死先前打開的excel過程。它將解決您的問題。
我寫了一個函數,可以在打開xls之前調用它。
private void kill_excel_process()
{
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Equals("EXCEL"))
{
clsProcess.Kill();
break;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.