BindToMoniker打开一个新的Excel会话
以下代码尝试附加到打开了C:\ test文件的Excel会话。 如果这样的会话不存在,则返回null或抛出exception。
var myExcelWorkbook = Marshal.BindToMoniker(@"C:\test") as Excel.Workbook;
这个文件没有扩展名时效果很好。 但是,如果我正在尝试使用具有扩展名的文件(例如C:\ test.xlsb)完全相同的代码,则调用会在返回之前尝试使用excel打开该文件。 如果一个实例已经在运行,它将尝试在该实例中打开文件(就像在Windows资源pipe理器中双击该文件一样)。
var myExcelWorkbook = Marshal.BindToMoniker(@"C:\test.xlsb") as Excel.Workbook;
这肯定与扩展(如何BindToMoniker知道如何打开Excel,否则?),但是非常烦人,因为我从来不想附加到一个现有的Excel文件没有已经打开的文件。
有没有办法禁用“function”? 我想BindToMoniker方法永远不会试图打开一个文件,让我决定在各种情况下做什么。
这个问题很可能与如何在“运行对象表”中命名Excel文档而不是扩展名的存在。
阅读IRunningObjectTable …有IRunningObjectTable.EnumRunning这可能是有用的。