1。網上的一種說法,關閉range,關閉worksheet,關閉workbook,最后關閉excel
System.Runtime.InteropServices.Marshal.ReleaseComObject(Range);
2System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
3System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
Range = null;
myBook = null;
myExcel = null;
我試過,沒有成功
2。關閉進程
C#和Asp.net下excel進程一被打開,有時就無法關閉,?? 尤其是website.對關閉該進程有過GC、release等方法,但這些方法并不是在所有情況下均適用。? 于是提出了kill?? process的方法,?? 目前我見過的方法多是用進程創建時間篩選excel.exe進程,?? 然后kill 。???? 這樣的方法是不精確的,?? 也是不安全的,?? 通過對網上一些關于Api運用文章的閱讀,?? 我找到了更為直接精確找到這個process并kill的方法,以下就是代碼????????
using?? System.Runtime.InteropServices;??
?????
? [DllImport("User32.dll",?? CharSet?? =?? CharSet.Auto)]??
? public?? static?? extern?? int?? GetWindowThreadProcessId(IntPtr?? hwnd,?? out?? int?? ID);??
? protected?? void?? Button1_Click(object?? sender,?? EventArgs?? e)??
? {??
????? Excel.ApplicationClass?? excel?? =?? new?? Microsoft.Office.Interop.Excel.ApplicationClass();??
????? excel.Workbooks.Open("d:\aaa.xls",?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing);??
????? IntPtr?? t?? =?? new?? IntPtr(excel.Hwnd);??
????? int?? k?? =?? 0;??
????? GetWindowThreadProcessId(t,?? out?? k);??
????? System.Diagnostics.Process?? p?? =?? System.Diagnostics.Process.GetProcessById(k);??
????? p.Kill();??????????????????
?? }
以上代碼百分百成功的關閉excel.exe進程
我的做法是結合兩者,先釋放資源,然后關閉進程。
同時網上說避免使用GC.Collect 方法 (),因為會導致整個clr進行gc,影響你的性能.所以我也沒有調用GC.Collect
posted on 2006-11-04 11:28
陳琪 閱讀(10167)
評論(16) 編輯 收藏 所屬分類:
C#