簡體   English   中英

從C#聲明文件打開Excel表單時引發異常

[英]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.xlsprodfile.xls

這可能會花費很長時間,但是您可以進行一些調試以確保Jet試圖打開的文件確實存在嗎? 出於某種原因,可能是文件名構造不正確。

以下是針對相同根本問題的一些答案:

在Windows服務中使用OleDb從Excel中讀取?

在開始閱讀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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM