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

C# 调用Office Excel 接口方法Quit(),但是Excel进程不退出的解决办法 相信在C# 中使用过EXCEL的人都遇到过调用 ExcelApplication.Quit() ,但是 Excel进程依然存在的情况: Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); //Do your work... 阅读详情

在使用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的垃圾回收方法。

以上操作的代码如下:

        private void button1_Click(object sender, EventArgs e)
        {

            String str = @"测试数据";

            // 1.启动Excel进程
            Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.Visible = false;

            // 2.获取Workbooks对象
            Workbooks wbs = excelApp.Workbooks;

            // 3.添加工作薄Workbook对象
            Workbook wb = wbs.Add();

            // 4.获取第一个工作表Workbook
            Worksheet ws = (Worksheet)wb.Worksheets.Item[1];

            // 5.获取单元格并设置文本
            Range rng = (Range)ws.Cells[1, 1];
            rng.Value = str;

            rng = (Range)ws.Cells[2, 1];
            rng.Value = str;

            // 6.7 保存Excel文档并关闭
            wb.SaveAs(@"C:\test.xls");
            wb.Close();

            // 8.退出Excel程序
            excelApp.Quit();

            // 9.释放资源
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

            // 10.调用GC的垃圾收集方法
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }



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

vb.net操作Excel进程残留Excel.exe问题 方案一 调用Kill方法,结束进程,居然很多人就这么干了,居然也还有弄不掉的问题。首先,这样不能区分正常打开Excel和软件调用的Excel进程名称完全一样。于是要找一个关联的标签或者进程ID,也许能走通。 方案二 垃圾回收,System.GC.Collect()。百度的结论大多是这样,在程序结尾加上。事实上没有用。 奇葩的事情: 如果你把System.GC.Collect()放在程序入口,虽然不能帮你清理这次的Excel.exe,但是下一次运行的候,会帮你清理掉,也就是说,不会反复运行,产生一堆E. 阅读详情

相关推荐

VS2019配置Qt5.14.2开发环境全流程(含MSVC2017 64-bit选择指南)

本文详细介绍了在VS2019中配置Qt5.14.2开发环境的完整流程,特别针对MSVC2017 64-bit编译器的选择提供了专业建议。从环境准备、Qt安装配置到VS2019集成设置,逐步指导开发者完成开发环境的搭建,并提供了常见问题的解决方案和高级优化技巧,帮助开发者高效进行Qt开发。

weixin_29243279的博客 490

vb/vba引用excel无法退出excel进程解决方法

vb/vba 引用excel对象后通过 xlapp.quit set xlapp=nothing 无法关掉excel进程解决方法

【SLAM】探索explore_lite在移动机器人自主建图中的高效边界检测策略

本文深入解析了explore_lite在移动机器人自主建图中的应用,重点探讨了其高效的贪婪边界检测策略。该工具包专为资源受限平台设计,通过直接利用SLAM生成的地图信息,以极低的计算开销实现快速、稳定的未知区域探索,并与move_base导航框架无缝协作,是轻量级机器人自主探索的优选方案。

purple的博客 1053

excel无法退出问题

上周用Excel VBA创建了一个窗体,打开窗体后,直接退出excel能成功,但把窗体关闭了再退出excel,死活退不了。没办法,只好逐一排除,发现是这一句出了问题: Set btIns(i) = New BtnSelectBtnSelect是我写的一个类,用完之后没释放,在退出窗体之前 Set btIns(i) = Nothing问题就解决了。一疏忽,折腾了几个小,教训!

bhzsisui的专栏 2940

Excel对象使用后进程不能退出的完美解决办法

主要原因是:程序并没有完全释放掉使用的资源,虽然程序正常关闭,程序本身也可以自动释放原来使用的资源,但Excel进程并不能判断到,只要Excel使用的资源有没有释放的,Excel进程就不会关闭解决办法:使用完Excel.Application对象后,关闭所有使用资源。如:app._Workbools / Sheets / _Workbook 等,最后 app.Quit()。以下是我写的一个分析指

sytWeibo的专栏 7461

Python开发案例之用Python子进程关闭Excel自动化中的弹窗

利用Python进行Excel自动化操作的过程中,尤其是涉及VBA,可能遇到消息框/弹窗(MsgBox)。此需要人为响应,否则代码卡死直至超 [^1] [^2]。根本的解决方法是VBA代码中不要出现类似弹窗,但有我们无权修改被操作Excel文件,例如这是我们进行自动化测试的对象。所以本文记录从代码角度解决此类问题的方法。 假想场景 使用xlwings(或者其他自动化库)打开Excel文件test.xlsm,读取Sheet1!A1单元格内容。很简单的一个操作: import xlwings as x

xuezhangmen的博客 1141

【转】.NET引用Excel操作无法关闭Excel.exe进程解决方法

 http://blog.csdn.net/hsyj_0001/article/details/7686364 在使用Office类库Microsoft.Office.Interop.Excel导入导出Excel文件操作后,即使调用Application的Quit()函数还是无法关闭Excel进程,在资源管理器中还是存在。 查询一些网上资料该问题终于解决了。具体步骤如下: 1.创建Ex...

zslefour的专栏 5737

c#EXCEL关闭关闭EXCEL进程

一直被一个问题困扰就是导出excel如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程 不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同又有人在导表那么这就把另外一个excel结束了,现在我们要办的 是如何kill当前这个进程,这里我们先看一下代码: oExc...

Nemo的笔记本 1万+

在asp.net操作excel如何关闭excel进程

在asp.net操作excel经常会出现关闭不了后台excel进程的情况,本人最近搜索了一些资料, 已可以成功在程序中关闭excel,代码如下: Excel.Application myExcel;Excel._Workbook myWB;Excel._Worksheet myWS = null;Excel.Range myRange = null; string filePath = Serv

平凡的人 3497

VB.NET 使用Microsoft.Office.Interop进行EXCEL操作彻底关闭EXCEL进程

Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop Public Class 关闭EXCEL ' ' TODO: 在此处添加构造函数逻辑 ' Public Sub New() End Sub <DllImport("User32.dll", CharS...

阿亮的专栏 3553

.Net程序中如何彻底关闭Excel - 关闭进程外COM方法

.Net中, 经常我们会利用Excel来展现数据. 我们知道此, Excel做为一个进程外COM被激活. 可是却无法彻底关闭进程. 这是什么原因呢?COM的生命周期依靠计数机制,只有当引用计数为零,该COM才会被释放..Net程序能调用COM,依赖于RCW(运行库可调用包装)组件,它负责把.Net方法的调用参数转化为COM接口中的参数,并调用相应的COM接口, 然后将返回结果最终返

redoc_li的专栏 1878

ASP.NET导出Excel并将Excel进程关闭 (根据进程ID)

开发工作中经常遇到跟Excel打交道的地方,但在ASP.NET中使用完Excel后往往不能将其关闭,导致服务器上的Excel进程越来越多.本文介绍一个直接将进程KILL的方法,根据进程ID来KILL,不会影响其他用户的操作. 完整EXCEL导出及结束代码参考如下: using System; using System.Collections; using System.Configuratio

kogu的博客 5503

C#读取excel后不能关闭excel.exe

http://www.cnblogs.com/wang_yb/archive/2010/05/02/1726135.html http://blog.csdn.net/kable999/article/details/5057507 http://www.blogjava.net/tank414/archive/2006/11/04/excel.html C#和Asp.net

zouahaijun的专栏 1376

EXCEL application.quit 不关闭进程问题解决

EXCEL application.quit 不关闭进程问题解决 直接上源码 public bool Format(string filePath, string outputFile) { var excelApplication = new Microsoft.Office.Interop.Excel.Application(); Workbook workbook = null; XlFixedForma

m0_37357930的博客 2577

VB之操作excel后不能关闭excel进程的原因及解决方法

一、问题: 使用如下代码打开、取值及关闭excel: Public Function ImportFromExcel(excelFile As String) As Long Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim strCard

HHY_haii的专栏 1万+

C#编程学习27: C#操作Excel从入门到精通

C#操作EXCEL的基本操作和海量数据导出优秀代码集锦

m1m2m3mmm的博客 3万+

VB.NET 调用Excel 不能关闭 Excel.exe 进程的问题

使用.net 调用Excel 生成Excel 报表 的候 会出现 Excel.exe进程不能关闭. 反复打开几次就会多几次Excel.exe的问题. 网上使用的关闭进程方法. ... .... GC.Collect(); ... .... 可是这样的方法不起作用. 直被一个问题困扰就是导出excel如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过

maxjove的专栏 5773

vb调用excel后,excel无法退出进程

zmhdgut的专栏 1415

Microsoft.Office.Interop.Excel 打开Excel进程关闭

<br />1、帮助类<br />using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Interop.Excel; using System.Reflection; namespace ExcelDemo { public delegate List<T> ReadExcelDelegate<T>(Worksheet

飘零之家 7725

基于PYNQ-Z2实现手写数字识别卷积神经网络硬件加速器源代码,CNN硬件加速器入门级项目

CNN硬件加速器入门级项目,基于PYNQ-Z2的手写数字识别卷积加速器设计

上一篇: ios常见加密解密方法
下一篇: 吐槽Mac OS 下libpomelo的安装过程
hsyj_0001
博客等级 码龄22年 22粉丝 15原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值