使用Interop后释放Excel

时间:2010-05-04 22:29:18

标签: excel process interop release

我读了很多帖子寻找我的答案,但都与此类似: Reading excel files in vb.net leaves excel process hanging

我的问题是我不退出应用程序...

这个想法是这样的:

如果用户有Excel打开,如果他有我感兴趣的文件打开...获取该Excel实例并做我想做的任何事情......

但是我完成后我不会关闭他的文件......我希望他继续努力,问题是当他关闭Excel时...过程继续运行......并且正在运行。 ..并在用户使用X按钮关闭Excel后运行...

这就是我尝试这样做的方式

这件作品用于知道他是否打开Excel,并在For I中检查我感兴趣的文件名。

    Try
        oApp = GetObject(, "Excel.Application")
        libroAbierto = True
        For Each libro As Microsoft.Office.Interop.Excel.Workbook In oApp.Workbooks
            If libro.Name = EquipoASeccionIdSeccion.Text & ".xlsm" Then
                Exit Try
            End If
        Next
        libroAbierto = False
    Catch ex As Exception
        oApp = New Microsoft.Office.Interop.Excel.Application
    End Try

这里是我的代码...如果他没有打开Excel,我会创建一个新实例,打开文件和其他所有内容。

我的代码以此结尾:

If Not libroAbierto Then
        libroSeccion.Close(SaveChanges:=True)
        oApp.Quit()
    Else
        oApp.UserControl = True
        libroSeccion.Save()
    End If    
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(libroOriginal)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(libroSeccion)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(origen)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(copiada)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oApp)
    libroOriginal = Nothing
    libroSeccion = Nothing
    oApp = Nothing
    origen = Nothing
    copiada = Nothing
    nuevosGuardados = True

所以你可以看到,如果我打开文件,我会调用oApp.Quit()以及其他所有内容,Excel Process会在几秒钟后结束(可能是5 aprox。)

但如果我的意思是用户保持文件打开(不调用Quit()),Excel进程会在用户使用X按钮关闭Excel后继续运行。

有没有办法做我想做的事情?控制excel的打开实例并释放所有内容,以便当用户使用X按钮关闭它时,Excel进程正常死亡???

感谢!!!

1 个答案:

答案 0 :(得分:0)

在我看来,最好使用CreateObject代替GetObject(, "Excel.Application")(请参阅http://support.microsoft.com/kb/288902/enhttp://technet.microsoft.com/en-us/library/ee176980.aspx)。然后在调用FinalReleaseComObject之前调用Quit方法并且assigninh什么都没有明确的意义。