BindToMoniker打开一个新的Excel会话

时间:2012-06-25 16:40:55

标签: c# excel interop office-interop

以下代码尝试附加到已打开C:\ test文件的excel会话。如果这样的会话不存在,则返回null或抛出异常。

 var myExcelWorkbook = Marshal.BindToMoniker(@"C:\test") as Excel.Workbook;

当文件没有扩展名时,这非常有效。但是,如果我使用具有扩展名的文件(例如C:\ test.xlsb)尝试完全相同的代码,则调用将尝试在返回之前使用excel打开该文件。如果某个实例已在运行,它将尝试在该实例中打开该文件(就好像有人在Windows资源管理器中双击该文件一样)。

 var myExcelWorkbook = Marshal.BindToMoniker(@"C:\test.xlsb") as Excel.Workbook;

这肯定与扩展有关(BindToMoniker如何知道如何打开Excel?),但是非常烦人,因为我从不想附加到现有的没有已打开文件的excel会话。

有没有办法禁用该“功能”?我希望BindToMoniker方法永远不会尝试打开文件,让我决定在各种情况下该怎么做。

1 个答案:

答案 0 :(得分:1)

问题很可能在于如何在“运行对象表”中命名Excel文档而不是扩展名。

阅读IRunningObjectTable ...有IRunningObjectTable.EnumRunning可能有用。