安全彻底关闭实例Excel.Application后产生的进程方法

您所在的位置:网站首页 如何关闭vba 安全彻底关闭实例Excel.Application后产生的进程方法

安全彻底关闭实例Excel.Application后产生的进程方法

2023-08-16 02:57| 来源: 网络整理| 查看: 265

转载网友长江支流的文章“公布一个安全彻底关闭实例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