4

Microsoft.Office.Interop.Excel.ApplicationExcelファイルから値を読み取るために使用するC#プロジェクトに取り組んでいます:

try {
    Application xlApp = new Application();
    Workbook workbook = xlApp.Workbooks.Open(filename)
    // ... Load Excel values ...
} finally {
    // ... Tidy up ...
}

ブロックでは、finallyすべてが閉じられ、適切に破棄されていることを確認して、メモリ内にぶら下がっているものが何もなく、Excel がきれいに閉じられるようにしたいと考えています。このコードがどのように見えるべきかについてさまざまなスレッドを見てきましたが (思ったよりも複雑です!)、含まれている可能性のあるものは次のとおりです。

if (workbook != null) {
    workbook.Close();
    // ... possibly also Marshal.FinalReleaseComObject(workbook);
}

ただし、ワークブックが既に閉じられている場合はエラーがスローされるため、これを安全に確認するにはどうすればよいですか? この種のことはデバッグを歪める傾向があるため、可能であればエラーをキャッチしないことをお勧めします。閉じる前にブックの状態を確認するきれいな方法はありますか?

もう 1 つ質問- 後で行うworkbook.Close()場合に必要かどうか疑問に思っています - Excel アプリケーションを終了すると(および COM オブジェクトの解放が) 暗黙的に発生しますか?xlApp.Quit();workbook.Close()

4

1 に答える 1