.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, 1, 1);
Excel.Range end = GetRange(worksheet, 1, 1);

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);
}
经过实验,上面文章的说法是有一定效果的,文中的重点就是要使用对象类型进行操作,并且为每个要引用的对象创建变量,而且一定要在使用后释放。
查资料后,解决的方法是调用System.Runtime.InteropServices.Marshal.ReleaseComObject方法,然后将引用的对象赋值为null。
参照下面:















































































经过实验,上面文章的说法是有一定效果的,文中的重点就是要使用对象类型进行操作,并且为每个要引用的对象创建变量,而且一定要在使用后释放。