2

以下代码尝试附加到已打开 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 方法永远不会尝试打开文件,让我决定在各种情况下要做什么。

4

1 回答 1

1

问题很可能与 Excel 文档在“运行对象表”中的命名方式有关,而不是存在扩展名。

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

于 2012-06-25T16:47:20.100 回答