Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/05/2013, 20:17
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
Puntos: 2658
Respuesta: terminar proceso EXCEL.EXE desde vb.net

Volviendo al tema, todos los procesos de creacion de archivos Excel los terminaba con esto:
Código vb:
Ver original
  1. Try
  2.             '---------------------------------
  3.            ' Codigo que fuese
  4.            '---------------------------------
  5.            CerrarCOM(oExcel)
  6.             xlSheet = Nothing
  7.             xlBook = Nothing
  8.             oExcel = Nothing
  9.             GC.Collect()
  10.             ClearMemory()
  11.             Process.Start(oFileName)
  12.         Catch ex As OutOfMemoryException
  13.             Exit Function
  14.         Catch ex As Exception
  15.             CerrarCOM(oExcel)
  16.             xlSheet = Nothing
  17.             xlBook = Nothing
  18.             oExcel = Nothing
  19.             GC.Collect()
  20.             ClearMemory()
  21.         End Try

Dos de los métodos invocados están en el Module:

Código vb:
Ver original
  1. Friend Function CerrarCOM(ByRef oComObject As Object) As Boolean
  2.         Try
  3.             If oComObject Is Nothing = False Then
  4.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(oComObject)
  5.             End If
  6.             Return True
  7.         Catch ex As Exception
  8.             Return False
  9.         End Try
  10.     End Function
  11.  
  12.  
  13. #Region "Liberar Memoria no utilizada"
  14.     'Funcion de liberacion de memoria
  15.    Public Sub ClearMemory()
  16.         Try
  17.             Dim Mem As Process
  18.             Mem = Process.GetCurrentProcess()
  19.             SetProcessWorkingSetSize(Mem.Handle, -1, -1)
  20.         Catch ex As Exception
  21.             'Control de errores
  22.        End Try
  23.     End Sub
  24.  
  25. #End Region

Y un detalle que por allí no sabes: No puedes generar archivos de Excel si no tienes una impresora declarada (al menos hasta el VB.Net 2003), por lo que sería mejor comprobarlo antes.
Para ello, acá va una función de regalo (también iba en el Module):
Código vb:
Ver original
  1. Friend Function VerificarPrinter() As Boolean
  2.         Dim oPrint As New Printing.PrinterSettings
  3.         Try
  4.             If (oPrint.InstalledPrinters.Count = 0) Then
  5.                 MessageBox.Show("No se pueden realizar expotaciones a Excel si no existen" & vbNewLine & "impresoras definidas en esta PC.", "No se encontró impresora", MessageBoxButtons.OK, MessageBoxIcon.Error)
  6.                 Return False
  7.             End If
  8.         Catch ex As Exception
  9.             Return False
  10.         End Try
  11.         Return True
  12.     End Function

Por cierto, espero que no me preguntes qué es el "GC.Collect()"...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)