後釋放的Excel我讀過許多後找我的答案,但都與此類似: Reading excel files in vb.net leaves excel process hanging使用互操作
我的問題是,我不退出應用程序...
我們的想法是這樣的:
如果用戶有Excel中打開,如果他有我感興趣的打開文件...獲取Excel實例,做任何我想做的事......
但我完成後請不要關閉他的文件...我想讓他保持工作王,關閉它的問題是,當他關閉Excel ...該進程繼續運行...並正在運行...並在用戶用X按鈕關閉Excel後運行...
這是我如何嘗試做
這件作品是用來知道他有沒有Excel中打開,並在對我檢查的文件名,我感興趣的
Try
oApp = GetObject(, "Excel.Application")
libroAbierto = True
For Each libro As Microsoft.Office.Interop.Excel.Workbook In oApp.Workbooks
If libro.Name = EquipoASeccionIdSeccion.Text & ".xlsm" Then
Exit Try
End If
Next
libroAbierto = False
Catch ex As Exception
oApp = New Microsoft.Office.Interop.Excel.Application
End Try
這裏是我的代碼...如果他沒有打開Excel,我創建一個新實例,打開文件和其他所有內容。
我的代碼只能到此爲止:
If Not libroAbierto Then
libroSeccion.Close(SaveChanges:=True)
oApp.Quit()
Else
oApp.UserControl = True
libroSeccion.Save()
End If
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(libroOriginal)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(libroSeccion)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(origen)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(copiada)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oApp)
libroOriginal = Nothing
libroSeccion = Nothing
oApp = Nothing
origen = Nothing
copiada = Nothing
nuevosGuardados = True
所以你可以看到,如果我打開這個文件,我叫oApp.Quit()和(幾秒鐘後一切,Excel進程可能結束5 aprox。)
但是如果我的意思是用戶保持打開文件(而不是調用Quit()),Excel進程會在用戶使用X按鈕關閉Excel後繼續運行。
有沒有辦法做我想做的事?控制一個開放的Excel實例並釋放一切,當用戶用X按鈕關閉時,Excel進程正常死亡?
謝謝!
但是CreateObject創建一個新的Excel實例...我想獲得一個已經打開的Excel Book ...並且當我的應用程序完成使用時我想讓它打開...問題在於最後,如果用戶關閉Excel,該進程將繼續運行 – figus 2010-05-05 15:00:16
如果Excel已經運行,則不應關閉它。如果僅使用GetObject(,「Excel.Application」),如果它尚未運行,您將無法啓動Excel。請閱讀我在答案中包含的兩個參考資料。還有一點意見。它啓動一個應用程序的新實例,它不需要雙重內存。大多數DLL和EXE代碼將在應用程序之間共享。只需將「Memory - Working Set」與應用程序的「Memory - Private Working Set」進行比較即可。名稱「Memory - ...」是任務管理器(用於Windows 7)中列的名稱或使用Process Explorer(www.sysinternals.com) – Oleg 2010-05-05 18:16:01