-
/// <summary> /// /// </summary> private Excel.ApplicationClass m_xApp; private Excel.Workbooks m_xBooks; private Excel.Workbook m_xBook; /// <summary> /// 当前活动 /// </summary> private Excel.Worksheet m_xSheet; /// <summary> /// Excel单元格集合 /// </summary> private Excel.Range m_xRange; /// <summary> /// 缺少Object /// </summary> private object m_Missing = Missing.Value;
- C# code
-
/// <summary> /// 释放所引用的COM对象。注意:这个过程一定要执行。 /// </summary> public void Dispose() { Release(m_xSheet); Release(m_xBook); Release(m_xBooks); //Release(m_xApp); KillSpecialExcel(); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); } /// <summary> /// 释放对象,内部调用 /// </summary> /// <param name="o">将释放的对象</param> private void Release(object o) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(o); } catch { } finally { o = null; } } [DllImport("user32.dll", SetLastError = true)] static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId); /// <summary> /// 找到Excel的进程ID,然后杀死这个进程 /// </summary> public void KillSpecialExcel() { try { if (m_xApp != null) { int lpdwProcessId; IntPtr intPtr = new IntPtr(m_xApp.Hwnd); GetWindowThreadProcessId(intPtr, out lpdwProcessId); System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill(); } } catch (Exception ex) { Console.WriteLine("Delete Excel Process Error:" + ex.Message); } }