现在流传最多的关闭Excel进程的代码就是下面这几行了.
以前经常做Winform下面的Excel开发, 也是一直这样写程序的, 倒也相安无事
现在碰到了需要在Webform下做Excel, 而且巨恐怖的Excel格式, 要求程序里加上格式, 公式, 折叠, 注释等等.
WebForm下用这段代码始终就关闭不了. 始终有一个Excel的进程存在.
后来才发现, 把对Excel的操作代码单独成一个方法, 然后在这个方法调用完毕以后再执行GC.Collect()即可
把以上的操作放入一个CreateExcel的方法中去, 调用代码
这样写的话, 就可以在每次执行完毕以后就马上关闭这个Excel进程了
关于GC.Collect()这个方法, 放在调用Excel的方法中执行, 但是这个时候方法还并没有执行完毕, 所以无法判断当前使用的Excel是不是无用的. 所以无法关闭当前这个Excel的进程. 有时候我也看到这样写系统中始终会存在一个Excel进程, 也就是因为这个原因, 每次执行到这里的时候, 因为上次的Excel进程已经没有用了, 所以就把上次Excel进程关闭掉了, 但是本次的Excel进程始终存在. 如果把GC.Collect()这个方法写在调用Excel的方法外面, 就可以正确关闭了.
MSDN中关于这个方法的说明
另外, 请各位对Excel有过深入研究的大侠指教一下.
如果在程序里给一个Excel加上诸如公式和折叠这样的功能啊?
1
System.Runtime.InteropServices.Marshal.ReleaseComObject(r);
2 System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
3 System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
4
5GC.Collect();
2 System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
3 System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
4
5GC.Collect();
以前经常做Winform下面的Excel开发, 也是一直这样写程序的, 倒也相安无事
现在碰到了需要在Webform下做Excel, 而且巨恐怖的Excel格式, 要求程序里加上格式, 公式, 折叠, 注释等等.
WebForm下用这段代码始终就关闭不了. 始终有一个Excel的进程存在.
后来才发现, 把对Excel的操作代码单独成一个方法, 然后在这个方法调用完毕以后再执行GC.Collect()即可
把以上的操作放入一个CreateExcel的方法中去, 调用代码
1
ExcelBusiness.BSExcel.CreateExcel(filePath);
2GC.Collect();
2GC.Collect();
这样写的话, 就可以在每次执行完毕以后就马上关闭这个Excel进程了
关于GC.Collect()这个方法, 放在调用Excel的方法中执行, 但是这个时候方法还并没有执行完毕, 所以无法判断当前使用的Excel是不是无用的. 所以无法关闭当前这个Excel的进程. 有时候我也看到这样写系统中始终会存在一个Excel进程, 也就是因为这个原因, 每次执行到这里的时候, 因为上次的Excel进程已经没有用了, 所以就把上次Excel进程关闭掉了, 但是本次的Excel进程始终存在. 如果把GC.Collect()这个方法写在调用Excel的方法外面, 就可以正确关闭了.
MSDN中关于这个方法的说明
GC.Collect 方法 () [C#]
强制对所有代进行垃圾回收。
[C#]
public static void Collect();
备注
使用此方法尝试回收所有无法访问的内存。然而,Collect 方法并不保证可以回收所有无法访问的内存。
无论对象在内存中的时间有多长,所有的对象均被考虑回收;不过,在托管代码中引用的对象不会被回收。使用此方法强制系统尝试回收最大可用内存量。
强制对所有代进行垃圾回收。
[C#]
public static void Collect();
备注
使用此方法尝试回收所有无法访问的内存。然而,Collect 方法并不保证可以回收所有无法访问的内存。
无论对象在内存中的时间有多长,所有的对象均被考虑回收;不过,在托管代码中引用的对象不会被回收。使用此方法强制系统尝试回收最大可用内存量。
另外, 请各位对Excel有过深入研究的大侠指教一下.
如果在程序里给一个Excel加上诸如公式和折叠这样的功能啊?