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 に答える