关于.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);
        }
 
经过实验,上面文章的说法是有一定效果的,文中的重点就是要使用对象类型进行操作,并且为每个要引用的对象创建变量,而且一定要在使用后释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值