2012-04-01 9 views
1

なぜこれがExcelの発生を開いているのですか?なぜopenfiledialogがタスクマネージャプロセスにExcelを追加するのですか?

 OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
     DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog. 
     if (result == DialogResult.OK) // Test result. 
     { 
      //EXCEL.EXE *32 is now showing in the task manager! 

私は、タスクマネージャでプロセスを見ています上記のように、私はopenfiledialogからXLSXファイルを選択しています。

誰かが私にどのようにこのことが可能か教えていただけますか?

+0

その他すべてが失敗した場合は、コードを1ステップ実行してください。どのラインが問題を引き起こしているかがすぐにわかるはずです。また、Excelで返されるオブジェクトは、終了時にReleaseComObjectを介してリリースする必要があります。 xlWorkBook、xlWorkSheet、xlWorkSheet.get_Range、EmailList.Cells。いずれかのExcelが開いたままになります。 – Will

+0

ps。例外として、クリーンアップコードは、成功または例外に関係なく呼び出されることを保証するためにfinallyブロック内にある必要があります。 – Will

+0

ありがとうございます。あなたは編集された質問を見てください私は理由を見つけたと思う理由 –

答えて

1

Excelが既に開いている場合は、新しいインスタンスを作成する代わりに、このインスタンスを取得してください。

using System.Runtime.InteropServices; 

... 

Excel.Application xl = null; 
try { 
    // Try to get an existing instance 
    xl = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
} catch (COMException ex) { 
    // Excel was not open. Open a new instance 
    xl = new Excel.ApplicationClass(); 
} 
+0

お世話になりました。私のアプリケーションはExcelを開き、それを閉じなければなりません。 「あなたはすでにオープンしていますか?」とはどういう意味ですか? –

+0

??????????????/ –

+0

すでに開いているExcelアプリケーションが表示されているか、表示されていない可能性があります。後者の場合、タスクマネージャーに表示されます。 –

関連する問題