2
以下代碼嘗試附加到打開了C:\ test文件的Excel會話。如果這樣的會話不存在,則返回null或拋出異常。BindToMoniker打開新的Excel會話
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方法永遠不會嘗試打開文件,並讓我決定在各種情況下要做什麼。
好的,但是,如果沒有任何開放的Excel,運行對象表是空的Excel對象。爲什麼'BindToMoniker(「C:\ test.xlsb」)'打開excel和'BindToMoniker(「C:\ test」)'不是? –
沒關係,我所做的是循環通過運行表中的對象,如果我沒有找到我正在尋找的那個,我不稱之爲BindToMoniker。感謝您的建議 –
你很幸運,檢查ROT第一次爲你的情況工作。學習內部工作 - 開始閱讀真正的文檔[IMoniker :: BindToObject](http://msdn.microsoft.com/en-us/library/ms889312.aspx)(鏈接是Win CE,找不到更好的文檔) 。 –