1
System.Runtime.InteropServices.Marshal.ReleaseComObject(r);
2
System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
3
System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
4
5
GC.Collect();

2

3

4

5

以前经常做Winform下面的Excel开发, 也是一直这样写程序的, 倒也相安无事
现在碰到了需要在Webform下做Excel, 而且巨恐怖的Excel格式, 要求程序里加上格式, 公式, 折叠, 注释等等.
WebForm下用这段代码始终就关闭不了. 始终有一个Excel的进程存在.
后来才发现, 把对Excel的操作代码单独成一个方法, 然后在这个方法调用完毕以后再执行GC.Collect()即可
把以上的操作放入一个CreateExcel的方法中去, 调用代码
1
ExcelBusiness.BSExcel.CreateExcel(filePath);
2
GC.Collect();

2

这样写的话, 就可以在每次执行完毕以后就马上关闭这个Excel进程了
关于GC.Collect()这个方法, 放在调用Excel的方法中执行, 但是这个时候方法还并没有执行完毕, 所以无法判断当前使用的Excel是不是无用的. 所以无法关闭当前这个Excel的进程. 有时候我也看到这样写系统中始终会存在一个Excel进程, 也就是因为这个原因, 每次执行到这里的时候, 因为上次的Excel进程已经没有用了, 所以就把上次Excel进程关闭掉了, 但是本次的Excel进程始终存在. 如果把GC.Collect()这个方法写在调用Excel的方法外面, 就可以正确关闭了.
MSDN中关于这个方法的说明












另外, 请各位对Excel有过深入研究的大侠指教一下.
如果在程序里给一个Excel加上诸如公式和折叠这样的功能啊?