无法在C#项目中打开绑定的Excel文件

时间:2019-12-02 09:18:57

标签: c# wpf

我的项目中有一个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'。对象是否被移动,重命名,   或删除?

2 个答案:

答案 0 :(得分:2)

此代码使用OLE Automation启动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或任何其他打开该特定文件扩展名注册的应用程序。

答案 1 :(得分:0)

因此,我尝试了这种方法,显然.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;

但是,您(几乎)应该永远不要在代码中使用硬编码的文件名。因此,上述解决方案仅是示例,不能复制到生产代码中。