ここで提起された多くの同様の質問を認識しており、好奇心を満足させる解決策を見つけることなく、それらのほとんどを調べました(私のケースはもう少し具体的だと思います)。
WPF アプリケーション内の Excel ワークブックの名前付き範囲の名前からコレクションを作成しようとしています。その結果、アプリケーションを閉じた後でも Excel プロセスが実行されます。問題を次のコードにローカライズしました。それがなければ、すべて正常に動作します:
foreach (Excel.Name name in names)
{
namedRanges.Add(name.Name);
}
したがって、明らかに、ここにあるものはリリースされません。他のExcelオブジェクトと同様に、「Excel.Name」を閉じる/破棄する/終了する方法が見つかりませんでした。その方法を提案してください。私が使用している回避策は、特定のプロセスを強制終了することですが、この背後にある問題を理解し、より適切な解決策を見つけようとしています。完全なコードの抜粋は次のとおりです。
Excel.Application excel = new Excel.Application();
excel.Visible = false;
Excel.Workbooks wbooks = excel.Workbooks;
Excel.Workbook wbook = wbooks.Open(Proc.ExpenseFullPath);
ObservableCollection<string> namedRanges = new ObservableCollection<string>();
Excel.Names names = wbook.Names;
foreach (Excel.Name name in names)
{
namedRanges.Add(name.Name);
}
wbook.Close();
wbooks.Close();
excel.Quit();
編集:それを機能させる方法を見つけました。問題のある「foreach」を次のように置き換えました。
for (int i = 1; i <= names.Count; i++)
{
namedRanges.Add(names.Item(i).Name);
Marshal.FinalReleaseComObject(names.Item(i));
}