这是个共性的问题,奇怪的就是在有些机器上就可以。
我跟了半下午,发现只要worksheet赋过值(定义时除外),这个EXCEL进程就退出不了,只能在调试时杀掉,唉,头疼啊。
好在当excel进程数多于两个的时候,GC.COLLECT就可以收集掉多余的EXCEL进程了,勉强用吧。
我跟了半下午,发现只要worksheet赋过值(定义时除外),这个EXCEL进程就退出不了,只能在调试时杀掉,唉,头疼啊。
好在当excel进程数多于两个的时候,GC.COLLECT就可以收集掉多余的EXCEL进程了,勉强用吧。
Excel.Workbook.Close();
ExcelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject( ExcelRange );
System.Runtime.InteropServices.Marshal.ReleaseComObject( ExcelWorkSheet );
System.Runtime.InteropServices.Marshal.ReleaseComObject( ExcelWorkBook );
System.Runtime.InteropServices.Marshal.ReleaseComObject( ExcelApp );
ExcelRange = null;
ExcelWorkSheet = null;
ExcelWorkBook = null;
ExcelApp = null;
GC.Collect();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelapp);
就可以关掉这个EXCEL进程,可一旦操作了了worksheet,这个进程就死了,怪啊,不知道worksheet里有没有类似QUIT ,CLOSE的方法啊??
用winform却一切正常。
Excel释放不了资源只是在IIS中直接执行会出现,如果在WinForm下,就没有着种现象了。也就是说可以通过WinForm生成Excel的话就不存在这种问题了,你可以写一个WinForm来生成Excel,通过WEB与这个WinForm通讯,控制Excel的生成,生成之后拷贝回IIS的目录下即可。
我是通过Socket与WinForm通讯来生成的。