【问题标题】:Application not released from Task Manager [duplicate]应用程序未从任务管理器中发布[重复]
【发布时间】:2015-11-30 14:49:48
【问题描述】:

我正在尝试将一些数据从我的 windowsform 写入 Excel 文件,这可行。

        ' Excel load data
    Dim oExcelApp As New Microsoft.Office.Interop.Excel.Application
    Dim oWorkBook As Microsoft.Office.Interop.Excel.Workbook
    Dim oWorkSheet As Microsoft.Office.Interop.Excel.Worksheet

    oWorkBook = oExcelApp.Workbooks.Open("C:\Temp\Test.xlsx")
    oWorkSheet = oWorkBook.Worksheets(1)

    oWorkSheet.Range("A1").Value = "Test"

    oWorkBook.Save()
    oWorkBook.Close()

问题是:完成后Excel 仍在我的任务管理器中运行。当我按 10 次按钮时,我的任务管理器中有 10 个 Excel 引用。

问题:将值写入Excel 后,如何完全卸载Excel

【问题讨论】:

标签: vb.net excel


【解决方案1】:

您需要QuitMicrosoft Excel 然后释放对象。

此答案引用的代码:The proper way to dispose Excel com object using VB.NET?Excel application not quitting after calling quit

'Excel load data
Dim oExcelApp As New Microsoft.Office.Interop.Excel.Application
Dim oWorkBook As Microsoft.Office.Interop.Excel.Workbook
Dim oWorkSheet As Microsoft.Office.Interop.Excel.Worksheet

oWorkBook = oExcelApp.Workbooks.Open("C:\Temp\Test.xlsx")
oWorkSheet = oWorkBook.Worksheets(1)

oWorkSheet.Range("A1").Value = "Test"

oWorkBook.Save()
oWorkBook.Close()

oExcelApp.Quit()

'Release object references.
releaseObject(oWorkSheet)
releaseObject(oWorkBook)
releaseObject(oExcelApp)

----------------------------------------------------------------------------
Private Sub releaseObject(ByVal obj As Object)
    Try
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        obj = Nothing
    Catch ex As Exception
        obj = Nothing
    Finally
        GC.Collect()
    End Try
End Sub

【讨论】:

  • 能否请您在回答中解释一下为什么会发生这种情况以及为什么需要致电ReleaseComObject,这样其他人就知道是什么导致了这个问题。
  • 看看thisthis的问题。
  • 我知道去哪里看这是我的问题 :) 我请你解释一下。如果你不能please cite your sources!
  • 感谢所有伟大的建议和参考。现在进入下一个障碍;)
【解决方案2】:

您必须关闭刚刚打开的连接。您可以通过在当前代码后添加这一行来做到这一点:

oExcelApp.Quit();

来源和更多信息:here

有关quit() 方法here 的更多信息。

重要提示:如果您有打开的工作簿尚未保存,此方法将显示一个对话框要求保存。

如果您不希望这样,您必须 (1):保存所有打开的工作簿或 (2) 将 DisplayAlerts 设置为 false。

(1)

workbooks.Save()

(2)

oExcelApp.DisplayAlerts = false

【讨论】:

  • 我在最后添加了 oExcelApp.Quit()。但是我仍然可以在我的任务管理器中看到 Excel?
  • 给我一点时间,我自己创建一个测试应用程序来检查。
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多