以下代码尝试附加到已打开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方法永远不会尝试打开文件,让我决定在各种情况下该怎么做。
答案 0 :(得分:1)
问题很可能在于如何在“运行对象表”中命名Excel文档而不是扩展名。
阅读IRunningObjectTable ...有IRunningObjectTable.EnumRunning可能有用。