Vb.net Visual Basic不关闭excel
我正在开发一个程序,可以让你输入一个人的信息,然后该程序将其放入Excel文件中。 打开Excel很好,但我无法关闭它。如果我打开taskmanager,仍然会有一个Excel open实例。我试了很多东西,但都找不到答案。我使用的是VB.net,我使用的是Microsoft office 2013(如果有必要的话) 我希望你能帮助我Vb.net Visual Basic不关闭excel,vb.net,excel,Vb.net,Excel,我正在开发一个程序,可以让你输入一个人的信息,然后该程序将其放入Excel文件中。 打开Excel很好,但我无法关闭它。如果我打开taskmanager,仍然会有一个Excel open实例。我试了很多东西,但都找不到答案。我使用的是VB.net,我使用的是Microsoft office 2013(如果有必要的话) 我希望你能帮助我 更新的代码-仍不工作 Private Sub opslaan_Click(sender As Object, e As EventArgs) Handl
更新的代码-仍不工作
Private Sub opslaan_Click(sender As Object, e As EventArgs) Handles opslaan.Click
Dim excelApp As Excel.Application
Dim excelWB As Excel.Workbook
Dim excelWS As Excel.Worksheet
excelApp = CreateObject("Excel.Application")
excelApp.Visible = False
If My.Computer.FileSystem.FileExists(My.Settings.Location) Then
excelWB = excelApp.Workbooks.Open(My.Settings.Location)
excelWS = excelWB.Worksheets(1)
Else
excelWB = excelApp.Workbooks.Add
excelWS = excelWB.Worksheets(1)
End If
If My.Computer.FileSystem.FileExists(My.Settings.Location) Then
excelWB.Save()
Else
excelWB.SaveAs(My.Settings.Location)
End If
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWS)
excelWB.Close(SaveChanges:=False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWB)
excelApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
Me.Close()
End Sub
就像@Enigmativity所说的,在退出excel后,您需要使用Marshal.ReleaseConObject关闭excel
excelApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
excelApp = Nothing
正如@Enigmativity所说,您必须释放com对象。但您不仅需要释放它,还需要调用GC.Collect()。。。使用GC.Collect将刷新这些对象并将它们从内存中删除,这就是您在任务管理器中看到它的原因
Private Sub ReleaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
您需要在处理完对象后调用此函数
excelWB.Close()
excelApp.Quit()
ReleaseObject(excelWS)
ReleaseObject(excelWB)
ReleaseObject(excelApp)
我以前也有过同样的问题,你可以在这里读到更多
在每个COM组件完全释放之前,您确实需要调用
System.Runtime.InteropServices.Marshal.ReleaseComObject(…)
。我需要将其放置在何处,我尝试了几个不同的位置,但都不起作用@Enigmativity您应该用调用ReleaseComObject
替换每一行=Nothing
。为变量赋值Nothing
是一个古老的VB6技巧,在.NET中应该避免。老实说,我更喜欢使用类似NPOI或openxml sdk的东西,它可以创建excel电子表格,而无需自动化excel,这是一种更好的方法。您不必处理由于用户的excel版本与您开发的不同而导致的问题for@Enigmativity我试过了,但Excel仍然打开,我用代码更新了帖子(可能是我做错了什么)。这篇帖子被自动标记为低质量,因为它只是代码。你介意把它扩展一点,解释一下它是如何解决这个问题的吗?我知道会的,很高兴能帮上忙。
excelWB.Close()
excelApp.Quit()
ReleaseObject(excelWS)
ReleaseObject(excelWB)
ReleaseObject(excelApp)