我读了很多帖子寻找我的答案,但都与此类似: 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进程正常死亡???
感谢!!!
答案 0 :(得分:0)
在我看来,最好使用CreateObject
代替GetObject(, "Excel.Application")
(请参阅http://support.microsoft.com/kb/288902/en和http://technet.microsoft.com/en-us/library/ee176980.aspx)。然后在调用FinalReleaseComObject之前调用Quit
方法并且assigninh什么都没有明确的意义。