声明部分:
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

解决方案 »

  1.   

    在ASP.NET服务器端通过Automation使用Excel不是推荐的做法但你坚持的话,你需要将所有有关的引用都释放掉,参考
    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
      

  2.   

    saucer前辈,“不推荐用Automation来操作Excel”---那该用什么方法呢,请指点。
      

  3.   

    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();
    我都做了垃圾回收  不知道怎么还有进程不能释放!  大家帮忙呀!
    我也想过不用这个方法  用OWC 可又碰到了问题 在:
    http://community.csdn.net/Expert/topic/3837/3837583.xml?temp=.1067316希望大家尽量帮我解决一个!
      

  4.   

    自己也来up大家有没有操作EXCEL的组件呀!?  介绍介绍哈  能用的照样给分 两个帖子地分一起给!
      

  5.   

    要实现把数据导入到EXCEL并到客户端保存  继续相大家讨教
      

  6.   

    我也做过很多尝试,发现确实在服务器端操作Excel不方便。问题:占资源,转换速度慢,Excel进程老杀不掉。实在要杀建议给ASP.NET帐号比较高的权限,用ntsd -c q -p PID命令来杀。建议:
    还是把数据导为文本文件,让用户自己去导入到Excel吧。
    如果不需要用户操作转换后的数据,建议用报表工具吧。
      

  7.   

    我今天试这用了杀死进程的方法  把运行权限提升 杀进程成功了!
    但还是有误杀现象  把我打开地EXCEL也关掉了  如何防止误杀呢!?  大家给个思虑吧?!
    if(!thisproc.CloseMainWindow())好象判断不起作用见了EXCEL进程就杀!
    foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcessesByName("EXCEL")) 
    {
    if(!thisproc.CloseMainWindow())
    {
    thisproc.Kill();
    }
    }
      

  8.   

    我也是碰到这样的问题,一直都没有办法结局。晕
    看到网上的导出到Excel的方法,都是直接导出为cvs格式的,这样就会失去Excel中的格式,在客户那里是根本通不过的。
    晕。
      

  9.   

    在想不出更好地办法地情况下我这么搞了
    在声明EXCEL对象前加一个DateTime startDateTime = DateTime.Now ;再在杀进程前加一个
                                        if ( startDateTime < thisproc.StartTime )
    {
    thisproc.Kill();
    }
    判断一下  还可以杀死EXCLE进程 也避免了误杀
    如果谁有更好地办法 拿出来分享一下!
      

  10.   

    怎么直白的问题为什么老是有人要问,还老是有人回答不能清除
    其实很简单,因为垃圾回收不回收调用它的这一块
    你把
    excel操作做成一个函数
    在使用中调用这个函数
    函数后面跟一个GC.Collect();
      

  11.   

    如果只是导成EXCEL  应该没有这么麻烦吧。
    把数据结构化之后,输出的方式设置为excel  可能就可以了
      

  12.   

    这个问题一搜索一大堆,建议楼主先自己搜索
    以前我在csdn回答过好几次这个问题
    给个提示了,要杀死进程必须先把你程序对EXCEL的引用撤掉
    然后用  GC.Collect() 就可以回收。
    提个建议:不要一遇到问题就发贴,要先自己学会搜索,同一个问题回答三遍还可以接受
    看见的次数多了,别人也就不想回答了。  不过我也是菜鸟,呵呵,一起进步 :)
      

  13.   

    excel.Workbooks
    ==============
    你用到了Workbooks对象,你应该定义一个变量,指向Workbooks
    然后再释放这个变量只要你用到的对象,都要用这个方法Excel才会释放内存