解决.NET引用Excel操作时无法关闭Excel.exe进程的办法

解决.NET引用Excel操作时无法关闭Excel.exe进程的办法

作者:稚子 时间:2014-04-21 分类:BS架构后台语言 CS架构后台语言 评论:0条 浏览:2407

.NET引用Excel操作时无法关闭Excel.exe进程的解决方法

在使用Office类库Microsoft.Office.Interop.Excel导入导出Excel文件操作后,即使调用Application的Quit()函数还是无法关闭Excel进程,在资源管理器中还是存在。

查询一些网上资料该问题终于解决了。具体步骤如下:

1.创建Excel的Application对象

2.获取Application的Workbooks对象集合

3.添加一个工作薄Workbook对象

4.获取该工作薄中的一个Worksheet对象

5.对该Worksheet对象中的Range对象进行操作。

6.调用Workbook对象的Save或SaveAs函数,保存工作簿

7.调用Workbook对象的Close函数,关闭该工作簿

8.调用Application对象的Quit函数,关闭整个Excel程序。

一般到这一步大家都以为处理结束,Excel进程会结束,但实际运行时,即使关闭整个应用程序Excel进程也不会关闭。在网上会见到一些解决方法枚举系统中所有的Excel进程,然后将其逐个杀死,但是这样可能会误杀一些用户开启的Excel进程。

其实,没有退出Excel进程的原因只是由于一些资源没有释放,所以必须要手动释放这些资源,并且要显式调用垃圾回收GC进行垃圾回收。只需要在以上第8步之后,增加一下操作。

9.调用System.Runtime.InteropServices.Marshal.ReleaseComObject依次释放Range、Worksheet、Workbook、Workbooks和Application对象。

10.调用GC的垃圾回收方法。

以上操作的代码如下:

以上资源释放时缺少一种、释放次序错误或未手动调用GC都会导致Excel进程驻留在系统中。

标签:

相关推荐
更多

发表评论

电子邮件地址不会被公开。 必填项已用*标注

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据