我正在制作一个程序,让您输入有关某人的信息,然后该程序将其放入Excel文件中。 打开Excel工作正常,但我无法关闭它。如果我打开任务管理器,仍然会打开一个Excel实例。我尝试了很多东西,但找不到答案。我使用的是VB.net,我有Microsoft Office 2013(如果重要的话)。
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
excelWS = Nothing
excelWB.Close(SaveChanges:=False)
excelWB = Nothing
excelApp.Quit()
excelApp = Nothing
Me.Close()
End Sub
我希望你能帮助我。
更新的代码 - 仍然无效
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
答案 0 :(得分:0)
正如@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)
之前我有同样的问题,你可以在这里阅读更多内容..
答案 1 :(得分:-1)
就像@Enigmativity所说你退出excel后需要使用Marshal.ReleaseComObject来关闭excel
excelApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
excelApp = Nothing