C# で 既に開かれているEXCELファイルをオープンした際の例外処理について(COM)
解決したいこと
c# .NET8 にてInterop.Excelで EXCEL アプリを操作しています。
xlBooks.Open() でEXCELファイルをオープンする際に
既にファイルが開かれている場合の例外を処理したいのですが、
何をキャッチすれば良いのかわかりません。
どなたかご教示願います。
発生している問題・エラー
下記のコードにて
(1)すでに開いている EXCEL ファイルをさらに開こうとした場合
EXCELのエラーメッセージBox が開いて
['******.xlsx'は別のアプリケーションで開かれています。ファイルを閉じてもう一度お試しください。]
と表示されます。
この時、コンソールに書き出した ex では
「オープンエラーSystem.Runtime.InteropServices.COMException (0x800A03EC): ‥‥次の理由が考えられます。
• ファイル名またはパスが存在しません。
• ファイルが他のプログラムによって使用されています。
• 保存しようとしているブックと同じ名前のブックが現在開かれています。」
と表示されます。
その後、本プログラムを終了させた後にタスクマネージャで確認すると、EXCELのプロセスが残ってしまっています。
(2)存在しない EXCEL ファイルを開こうとした場合
EXCELのエラーメッセージBoxは開かれず、この時、コンソールに書き出した ex では 上記(1)と同じ内容が表示されます。
その後、本プログラムを終了させた後にタスクマネージャで確認すると、EXCELのプロセスは削除されているのが確認できます。
(1)の場合にも、例外をキャッチしてプログラム終了後にEXCELのプロセスが残らないようにしたいのですが、どのように処理すれば良いのでしょうか。
ご教示願います。
int i_xlBooksCount = xlBooks.Count;
try
{
xlBook[iTestSpec] = xlBooks.Open(OpenFileName);
}
catch (Exception ex)
{
if (xlBooks.Count != i_xlBooksCount + 1)
{
Console.WriteLine("オープンエラー" + ex);
Marshal.ReleaseComObject(xlBooks);
Marshal.ReleaseComObject(xlApp);
}
}
例)
NameError (uninitialized constant World)
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
ソースコードを入力
例)
def greet
puts Hello World
end
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。