關於.NET程序中使用Excel對象後,如何結束殘留的Excel進程

.NET中調用Excel將數據寫入到Excel文件中,程序結束後,系統中會殘留一個Excel進程沒有退出。
查資料後,解決的方法是調用System.Runtime.InteropServices.Marshal.ReleaseComObject方法,然後將引用的對象賦值爲null。
參照下面:
public static void CleanComObject(ref Excel.Range range)
        
{
            
//オブジェクトをリリースする
            if (range != null)
            
{
                Marshal.ReleaseComObject(range);
                range 
= null;
            }

        }


        
public static void CleanComObject(ref Excel.Shape shape)
        
{
            
//オブジェクトをリリースする
            if (shape != null)
            
{
                Marshal.ReleaseComObject(shape);
                shape 
= null;
            }

        }

        
        
public static void SaveWorkbook(Excel.Workbook workbook, string fileName)
        
{
#if DEBUG
            
if ((workbook == null)
                
|| IsValidString(fileName) == false)
            
{
                
throw new ArgumentException();
            }

#endif
            
//Workbookのカーソルを一頁の左上に設定する
            Excel.Worksheet worksheet = null;
            Excel.Range range 
= null;

            
for (int i = workbook.Sheets.Count; i > 0; i--)
            
{
                worksheet 
= GetIndexWorksheet(workbook, i);

                
//worksheet.Activate();
                ((Excel._Worksheet)worksheet).Activate();

                Excel.PageSetup pageSetup 
= worksheet.PageSetup;
                pageSetup.PrintArea 
= string.Empty;
                CleanComObject(
ref pageSetup);

                Excel.Range start 
= GetRange(worksheet, 11);
                Excel.Range end 
= GetRange(worksheet, 11);

                range 
= worksheet.get_Range(start, end);
                range.Select();

                CleanComObject(
ref start);
                CleanComObject(
ref end);
                CleanComObject(
ref range);
                CleanComObject(
ref worksheet);
            }


            
//ファイルをクローズしますのメッセージを出力します。
            workbook.SaveAs((object)fileName,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Excel.XlSaveAsAccessMode.xlNoChange,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value,
                Missing.Value);

            CleanComObject(
ref worksheet);
        }
 
經過實驗,上面文章的說法是有一定效果的,文中的重點就是要使用對象類型進行操作,並且爲每個要引用的對象創建變量,而且一定要在使用後釋放。
發佈了46 篇原創文章 · 獲贊 16 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章