【问题标题】:opening/closing instance of Excel - process is still running in the backgroundExcel 的打开/关闭实例 - 进程仍在后台运行
【发布时间】:2016-12-12 23:27:05
【问题描述】:

我创建了一个在我的 vb.net 应用程序中表现出色的摘录。我向它写入数据,保存它,然后询问用户是否愿意打开它。问题是,如果他们选择不查看它 - excel 正确关闭并且它没有在进程中运行 - 但是 - 当我在 excel 中查看它然后关闭它时 - 它仍在 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 vb.net process


【解决方案1】:

杀死一个进程并不是一个好主意,原因有很多,其中一个原因是您还将杀死您手动打开的 EXCEL 实例,您将丢失所做的更改。如果您想保持这种方式,请通过 PID 终止进程,并在启动应用时保存现有的。

或者....

要关闭 Office 自动化应用程序,如 Excel、Word 等。您必须释放 COM 对象..尝试类似的操作:

oApp.ActiveWorkbook.Close(True)
Application.DoEvents()
oApp.Quit()

System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oApp)
oApp = Nothing

oApp 当然是你的办公室Application

您也可以包含垃圾收集,但这不是一个好主意...

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

【讨论】:

  • 但似乎这个过程与我的应用程序相关联。如果我不打开 excel 应用程序来查看它 - 那很好。当我查看它时,它只会在进程中运行。然后,当我关闭我的应用程序时,excel 就会从进程中消失。
  • 那么 zou 必须在您用于查看您的 excel 的代码之后关闭您的进程。编写一个函数并在需要的时间和地点调用它。 ;)
猜你喜欢
  • 2023-04-04
  • 2021-04-20
  • 2015-09-07
  • 1970-01-01
  • 2011-04-02
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
相关资源
最近更新 更多