Excel进程的打开/closures实例仍在后台运行

我创build了一个提取excel在我的vb.net applicatino。 我写数据,保存,然后询问用户是否打开它。 问题是,如果他们select不查看它 – excel正确closures并且不在进程中运行 – 但是,当我在excel中查看并closures它时,它仍然在WTM进程中运行。 这是我的代码…

Dim FileNam As String = "C:\Me\" & ReportName & Format(DateTime.Now, "yyyyMMddhhmmtt") & ".xlsx" If System.IO.File.Exists(FileNam) Then System.IO.File.Delete(FileNam) End If wBook.SaveAs(FileNam) answer = MsgBox("Your extract has been saved here: " & strFileName & vbCrLf & vbCrLf & "Would you like to view the file?",vbYesNo) If answer = vbYes Then System.Diagnostics.Process.Start(FileNam) End If 

编辑:我可能会添加这是所有在TRY CATCH语句 – 这是最后一部分…

  GC.Collect() For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL") If proc.MainWindowTitle.Trim() = "" Then proc.Kill() End If Next 

杀死一个进程并不是一个好主意,其中一个原因就是你会杀了一个EXCEL的实例,你手动打开了,你将会失去你的改变。 如果你想保持这种方式,通过一个PID杀死进程,并保存现有的,当你启动你的应用程序。

要么….

要closures一个办公自动化应用程序,如Excel,Word等。你必须处理COM对象 ..尝试类似的东西:

 oApp.ActiveWorkbook.Close(True) Application.DoEvents() oApp.Quit() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oApp) oApp = Nothing 

当然, oApp是您的Office Application

你也可以包括垃圾收集,但不是一个好主意…

 GC.Collect() 'Start .NET CLR Garbage Collection GC.WaitForPendingFinalizers() 'Wait for GC to finish