次のコードは、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メソッドがファイルを開こうとしないようにし、さまざまな場合に何をするかを決定させてください。