声明部分:
Excel.Application excel = null ;
//excel = new Excel.Application();
excel = new Excel.ApplicationClass();
Excel.WorkbookClass oWB;
Excel.Worksheet oSheet;
释放部分: oWB.Close(false,null,null);
excel.Workbooks.Close();
excel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject (excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet); oSheet = null;
oWB= null;
excel = null; GC.Collect();
大家帮忙看看到底有哪里不对地 可就是进程里的EXCEL老是存在 每调用一次就多一个!
我不想要那种在进程里找到“EXCEL”进程然后杀死地方法! 感觉那种方法不妥当 容易错杀 并且怕IIS用户没有权限来杀死进程里地EXCEL我在没有办法地情况下试这用OWC来完成 可又碰到了操作地问题
希望大家能帮忙尽力解决!
OWC问题见:
http://community.csdn.net/Expert/topic/3837/3837583.xml?temp=.1067316
Excel.Application excel = null ;
//excel = new Excel.Application();
excel = new Excel.ApplicationClass();
Excel.WorkbookClass oWB;
Excel.Worksheet oSheet;
释放部分: oWB.Close(false,null,null);
excel.Workbooks.Close();
excel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject (excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet); oSheet = null;
oWB= null;
excel = null; GC.Collect();
大家帮忙看看到底有哪里不对地 可就是进程里的EXCEL老是存在 每调用一次就多一个!
我不想要那种在进程里找到“EXCEL”进程然后杀死地方法! 感觉那种方法不妥当 容易错杀 并且怕IIS用户没有权限来杀死进程里地EXCEL我在没有办法地情况下试这用OWC来完成 可又碰到了操作地问题
希望大家能帮忙尽力解决!
OWC问题见:
http://community.csdn.net/Expert/topic/3837/3837583.xml?temp=.1067316
解决方案 »
- 我在做一个下载文件的空间用Response后可以选打开或是保存文件,选打开的时候总是在本页面打开,如何让选择打开的时候在新页面中打开文件呢?
- 简单问题,查询结果分页不成功?!
- 怎样把数据库中的以xml格式保存的记录以表格形式展现到页面给用户
- 我的.js文件包含到了.aspx页面中了,但是为什么却用不了,请指点
- 关于隐藏左侧导航栏框架的问题!!!!!!
- 请问DataSet能设置分页吗?
- 问题不难,有经验的帮帮我了,抛出的异常中带有\r\n,如果在用户操作的时候抛出了异常,然后就转到错误页面
- WEBFORM 中的DataGrid在无数据时,只显示表头和表身.该如何在中间添加几行空白行?
- 关于部署ASP.net程序
- 请问如何让logo重复显示在每个网页的头部
- 问过不下100程序员,都搞不清楚,asp.net(vb)请进!!!那位高人知道为什么?要怎么修改?
- 关于如何学习 “Microsoft 快速入门教程”
PRB:使用 Visual Studio .NET 客户端执行自动化功能后不退出 Office 应用程序
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;317109也请参考http://groups-beta.google.com/group/microsoft.public.dotnet.framework.aspnet/msg/708bd0afb0c9e386
excel.Workbooks.Close();
excel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject (excel);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWB);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oSheet); oSheet = null;
oWB= null;
excel = null; GC.Collect();
我都做了垃圾回收 不知道怎么还有进程不能释放! 大家帮忙呀!
我也想过不用这个方法 用OWC 可又碰到了问题 在:
http://community.csdn.net/Expert/topic/3837/3837583.xml?temp=.1067316希望大家尽量帮我解决一个!
还是把数据导为文本文件,让用户自己去导入到Excel吧。
如果不需要用户操作转换后的数据,建议用报表工具吧。
但还是有误杀现象 把我打开地EXCEL也关掉了 如何防止误杀呢!? 大家给个思虑吧?!
if(!thisproc.CloseMainWindow())好象判断不起作用见了EXCEL进程就杀!
foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
if(!thisproc.CloseMainWindow())
{
thisproc.Kill();
}
}
看到网上的导出到Excel的方法,都是直接导出为cvs格式的,这样就会失去Excel中的格式,在客户那里是根本通不过的。
晕。
在声明EXCEL对象前加一个DateTime startDateTime = DateTime.Now ;再在杀进程前加一个
if ( startDateTime < thisproc.StartTime )
{
thisproc.Kill();
}
判断一下 还可以杀死EXCLE进程 也避免了误杀
如果谁有更好地办法 拿出来分享一下!
其实很简单,因为垃圾回收不回收调用它的这一块
你把
excel操作做成一个函数
在使用中调用这个函数
函数后面跟一个GC.Collect();
把数据结构化之后,输出的方式设置为excel 可能就可以了
以前我在csdn回答过好几次这个问题
给个提示了,要杀死进程必须先把你程序对EXCEL的引用撤掉
然后用 GC.Collect() 就可以回收。
提个建议:不要一遇到问题就发贴,要先自己学会搜索,同一个问题回答三遍还可以接受
看见的次数多了,别人也就不想回答了。 不过我也是菜鸟,呵呵,一起进步 :)
==============
你用到了Workbooks对象,你应该定义一个变量,指向Workbooks
然后再释放这个变量只要你用到的对象,都要用这个方法Excel才会释放内存