安全彻底关闭实例Excel.Application后产生的进程方法 |
您所在的位置:网站首页 › 如何关闭vba › 安全彻底关闭实例Excel.Application后产生的进程方法 |
转载网友长江支流的文章“公布一个安全彻底关闭实例Excel.Application后产生的进程方法。好久没上来了,作个见面礼! ”,原帖地址:http://community.csdn.net/Expert/topic/4252/4252815.xml?temp=.5887415 说明一下:private Excel.Application _xlApp;//Excel应用程序private Excel.Workbook _xlWorkbook;//获取Excel工作薄,默认为调用Open([Template])时创建private Object oMissing = System.Reflection.Missing.Value; //实例化对象时缺省参数 我们实例并打开Excel时至少会用到xlApp= new Excel.ApplicationClass(); 创建一个Excel应用,可是一般每实例一次就产生一个Excel进程,这里提供安全彻底关闭实例Excel.Application后产生的进程,方法中的_xlWorkbook为实例ApplicationClass后_xlWorkbook = _xlApp.Workbooks.Add(oMissing); //创建并返回Excel工作薄 /// /// 关闭实例Excel.Application后产生的进程/// public void Close(){if (_xlApp != null){int generation = 0; _xlApp.UserControl = false; //如果您将 DisplayAlerts 属性设置为 False,则系统不会提示您保存任何未保存的数据。//_xlApp.DisplayAlerts = false; if (_xlWorkbook != null){//如果将 Workbook 的 Saved 属性设置为 True,则不管您有没有进行更改,Excel 都不会提示保存它//_xlWorkbook.Saved = true;try{经过实验,这两句写不写都不会影响进程驻留。如果注释掉的话,即使用户手动从界面上关闭了本程序的Excel,也不会影响//_xlWorkbook.Close(oMissing,oMissing,oMissing);//_xlWorkbook = null; }catch{//用户手动从界面上关闭了本程序的Excel窗口}} //即使用户手动从界面上关闭了,但是Excel.Exe进程仍然存在,用_xlApp.Quit()退出也不会出错,用垃圾回收彻底清除_xlApp.Quit(); //System.Runtime.InteropServices.Marshal.ReleaseComObject((object)_xlApp); generation = System.GC.GetGeneration(_xlApp);_xlApp = null; //虽然用了_xlApp.Quit(),但由于是COM,并不能清除驻留在内存在的进程,每实例一次Excel则Excell进程多一个。//因此用垃圾回收,建议不要用进程的KILL()方法,否则可能会错杀无辜啊:)。System.GC.Collect(generation); } oMissing = null;} 有网友QQ上问我怎么杀死Excel进程,如下 /// /// 强制终止所有Excel进程/// public static void KillExcelProcess(){System.Diagnostics.Process[] excelProcess = System.Diagnostics.Process.GetProcessesByName("Excel"); foreach(System.Diagnostics.Process process in excelProcess){if (process != null){ process.Kill();}}} 经过严格试验,看来在WinForm下朋友们是相信可以完全关闭Excel进程,现在告诉大家:在WebForm下也可以完全关闭Excel进程。 private void Button1_Click(object sender, System.EventArgs e){ExportExcel();System.GC.Collect();} private void ExportExcel(){GoldPrinter.ExcelExpert.ExcelBase excel = new GoldPrinter.ExcelExpert.ExcelBase();excel.Open(); excel.SetCellText("A1","www.webmis.com.cn"); excel.PrintPreview(); excel.Close();} |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |