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