在VB.net关闭后,Excel进程仍然运行
发布时间:2020-12-17 07:26:40 所属栏目:百科 来源:网络整理
导读:我的问题基本上就是如何结束使用excel时运行的Excel.exe进程.在应用程序中,我打开并使用带有几张纸的excel工作簿,然后将它们留给用户随意使用,我的问题是我的应用程序永远不会放弃Excel流程. 如果在关闭excel之前关闭了应用程序,则关闭excel时进程结束,否则
我的问题基本上就是如何结束使用excel时运行的Excel.exe进程.在应用程序中,我打开并使用带有几张纸的excel工作簿,然后将它们留给用户随意使用,我的问题是我的应用程序永远不会放弃Excel流程.
如果在关闭excel之前关闭了应用程序,则关闭excel时进程结束,否则如果在关闭excel后关闭我的应用程序,则该进程将继续运行. 我已经尝试了一些我在互联网上发现的与GC.collect有关的东西,等待待定的终结器或者其他类似的东西但是都没有用. 我也可以愉快地关闭excel流程,唯一的问题是不知道我是否正在关闭他们已经忽略但尚未保存的用户重要电子表格. 我不确定我的代码是否有任何帮助,但我使用microsoft.office.interop.excel来获得excel,并且我正在使用已保存在应用程序资源文件夹中的工作簿. -编辑- 这是我尝试过的一切,我知道它有点矫枉过正,但遗憾的是它仍然没有结束这个过程 Marshal.ReleaseComObject(FirstWorksheet) Marshal.FinalReleaseComObject(FirstWorksheet) Marshal.ReleaseComObject(SecondWorksheet) Marshal.FinalReleaseComObject(SecondWorksheet) Marshal.ReleaseComObject(ThirdWorksheet) Marshal.FinalReleaseComObject(ThirdWorksheet) Marshal.ReleaseComObject(FourthWorkSheet) Marshal.FinalReleaseComObject(FourthWorkSheet) Marshal.ReleaseComObject(xlRange) Marshal.FinalReleaseComObject(xlRange) Marshal.ReleaseComObject(SecondxlRange) Marshal.FinalReleaseComObject(SecondxlRange) Marshal.ReleaseComObject(thirdxlRange) Marshal.FinalReleaseComObject(thirdxlRange) Marshal.ReleaseComObject(fourthxlRange) Marshal.FinalReleaseComObject(fourthxlRange) Marshal.ReleaseComObject(.activeworkbook) Marshal.FinalReleaseComObject(.activeworkbook) Marshal.ReleaseComObject(excelApplication) Marshal.FinalReleaseComObject(excelApplication) MSExcelControl.QuitExcel() 'A function made by someone else I work with that was meant to close excel's process GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() GC.WaitForPendingFinalizers() -Edit-这是quitExcel方法 Friend Shared Sub QuitExcel() If Not getExcelProcessID = -1 Then If Not excelApp Is Nothing Then 'Close and quit With excelApp Try Do Until .Workbooks.Count = 0 'Close all open documents without saving .Workbooks(1).Close(SaveChanges:=0) Loop Catch exExcel As Exception 'Do nothing End Try Try .ActiveWorkbook.Close(SaveChanges:=0) Catch ex As Exception 'Do nothing End Try Try .Quit() Catch ex As Exception 'Do nothing Finally myExcelProcessID = -1 End Try End With excelApp = Nothing End If End If End Sub 他已经尝试用他班上的进程ID做同样的事情,问题是他没有工作,这就是为什么我试图再次获得进程ID我自己已经工作了 解决方法
很好的解决方案亚历克斯,我们不应该这样做,但我们这样做,EXCEL只是不会结束.我拿了你的解决方案并创建了下面的代码,在我的应用程序导入或导出Excel之前调用ExcelProcessInit,然后在完成后调用ExcelProcessKill.
Private mExcelProcesses() As Process Private Sub ExcelProcessInit() Try 'Get all currently running process Ids for Excel applications mExcelProcesses = Process.GetProcessesByName("Excel") Catch ex As Exception End Try End Sub Private Sub ExcelProcessKill() Dim oProcesses() As Process Dim bFound As Boolean Try 'Get all currently running process Ids for Excel applications oProcesses = Process.GetProcessesByName("Excel") If oProcesses.Length > 0 Then For i As Integer = 0 To oProcesses.Length - 1 bFound = False For j As Integer = 0 To mExcelProcesses.Length - 1 If oProcesses(i).Id = mExcelProcesses(j).Id Then bFound = True Exit For End If Next If Not bFound Then oProcesses(i).Kill() End If Next End If Catch ex As Exception End Try End Sub Private Sub MyFunction() ExcelProcessInit() ExportExcelData() 'Whatever code you write for this... ExcelProcesKill() End Sub (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |