1

重複の可能性:
C#でExcel相互運用オブジェクトを適切にクリーンアップする方法

私は一連の機能を持っています。その関数が合格した場合、ExcelRecorder()という関数を介してWebServices_output.xlsxというExcelシートにいくつかのメッセージを出力しています。失敗した場合は、ExcelRecorder()を介していくつかの失敗したメッセージを渡します。

以下に私のコードを投稿しています

public void ExcelRecorder(int error, string detailmessage, string message, int row)
        {  
            Excel.Application xlApp = new Excel.Application();                
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/WebServiceTestCases_Output.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;           
                if (!string.IsNullOrEmpty(message))
                {
                    ((Range)xlWorksheet.Cells[row, "M"]).Value2 = "FAIL";
                    ((Range)xlWorksheet.Cells[row, "N"]).Value2 = error;
                    ((Range)xlWorksheet.Cells[row, "O"]).Value2 = detailmessage;
                    ((Range)xlWorksheet.Cells[row, "P"]).Value2 = message;
                }
                else
                {
                    ((Range)xlWorksheet.Cells[row, "M"]).Value2 = "PASS";
                    ((Range)xlWorksheet.Cells[row, "N"]).Value2 = "";
                    ((Range)xlWorksheet.Cells[row, "O"]).Value2 = "";
                    ((Range)xlWorksheet.Cells[row, "P"]).Value2 = "";
                }
            xlWorkbook.Save();
            xlWorkbook.Close(0,0,0);
            xlApp.Quit();
        }

特にブックを保存し、閉じてから終了していますが、タスクマネージャーを開くと、Excel.EXEがまだ実行されていることがわかります。ExcelRecorder()を5〜6回実行すると、タスクマネージャーに5〜6個のExcel.EXEが表示され、プログラムがクラッシュします。

ここで何が問題になっていますか?ブックを閉じるためのコード行を追加したのに、ブックが閉じられないのはなぜですか?

4

1 に答える 1

2

これを行う必要があります:

xlApp.Quit();

そして、これ:

System.Runtime.Marshal.ReleaseComObject(xlApp);
于 2012-10-04T07:50:27.140 に答える