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