簡體   English   中英

無法在 C# 項目中打開綁定的 excel 文件

[英]Can't open bound excel file in C# project

我的項目中有一個 excel 文件,它被列為資源。

現在我嘗試用這樣的按鈕點擊打開它:

private void Button_Click_Blist(object sender, RoutedEventArgs e)
{
    Excel.Application xl = new Excel.Application();
    Excel.Workbook wb = xl.Workbooks.Open("Blist.xlsx");
}

我的問題是它說它找不到文件並拋出這個異常:

System.Runtime.InteropServices.COMException

我們找不到“Blist.xlsx”。 對象是否可能被移動、重命名或刪除?

此代碼使用 OLE 自動化來啟動 Excel 並告訴它在相對路徑Blist.xlsx打開一個文件。 在這種情況下,可執行文件是Excel ,而不是您自己的應用程序。 將使用 Excel 的工作目錄解析相對路徑。

為避免此問題,請將絕對文件路徑傳遞給 Excel :

var fullPath=Path.GetFullPath("Blist.xlsx");
Excel.Workbook wb = xl.Workbooks.Open(fullPath);

另一種不控制(或依賴)Excel 的可能性是僅使用Process.Start來“啟動”文件,例如:

Process.Start("Blist.xlsx");

或者

var fullPath=Path.GetFullPath("Blist.xlsx");
Process.Start(fullPath);

Windows Shell 將根據其擴展名找到可以打開此文檔的應用程序並啟動它,將文件路徑作為參數傳遞。 這可以啟動 Excel、Libre Calc 或任何其他注冊的應用程序以打開此特定文件擴展名。

所以我嘗試了這個,顯然.Open()方法與相對路徑有些額外的復雜性(見@PanagiotisKanavos 評論)。 您可以通過獲取當前目錄路徑並預先掛起它,給出文件的絕對路徑來解決這個問題:

string filename = "Blist.xlsx";
string currentPath = Directory.GetCurrentDirectory();

var xl = new Microsoft.Office.Interop.Excel.Application();            
var wb = xl.Workbooks.Open(currentPath + "\\" + filename);

xl.Visible = true;

但是,您應該(幾乎)永遠不要在代碼中使用硬編碼的文件名。 所以上面的解決方案只是一個例子,而不是復制到生產代碼中的東西......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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