使用Interop后释放Excel
我已经阅读了很多post寻找我的答案,但都是类似于这样的: 读取excel文件在vb.net叶excel进程悬挂
我的问题是,我不退出应用程序…
这个想法是这样的:
如果用户有Excel打开,如果他有我感兴趣的文件打开…获取该Excel实例,做任何我想做的事情…
但是我完成后不要closures他的文件…我希望他继续工作,问题是当他closuresExcel时…进程继续运行…并正在运行…和用户使用XbuttonclosuresExcel后运行…
这是我如何做到这一点
这篇文章是用来知道他是否打开Excel,并且在我检查我感兴趣的文件名。
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,我创build一个新的实例,打开文件和其他一切。
我的代码以这个结尾:
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过程几秒钟后结束(也许5 aprox)。
但是如果我的意思是用户保持打开的文件(不要调用Quit()),Excel进程会在用户使用XbuttonclosuresExcel后继续运行。
有没有办法做我想做的? 控制一个开放的Excel实例,并释放一切,所以当用户用Xbuttonclosures时,Excel进程正常死亡?
谢谢!!!
在我看来,使用CreateObject
而不是GetObject(, "Excel.Application")
会更好(请参阅http://support.microsoft.com/kb/288902/en和http://technet.microsoft.com/ en-us / library / ee176980.aspx )。 然后在调用FinalReleaseComObject和assigninh之前调用Quit
方法没有什么意义。