Foros del Web » Programación para mayores de 30 ;) » .NET »

Cerrar un componente Excel.

Estas en el tema de Cerrar un componente Excel. en el foro de .NET en Foros del Web. Hola chicos. Tengo un problema en VB.Net ya que al generar un informe excel, el componente no se cierra y queda en los procesos en ...
  #1 (permalink)  
Antiguo 01/12/2003, 11:15
 
Fecha de Ingreso: abril-2002
Mensajes: 20
Antigüedad: 22 años
Puntos: 0
Cerrar un componente Excel.

Hola chicos.

Tengo un problema en VB.Net ya que al generar un informe excel, el componente no se cierra y queda en los procesos en ejecución, así cada vez que levanto o ejecuto esto se levanta un componente por cada vez y terminan por matar mi servidor.

Uso la propiedad Quit para cerrar la aplicación pero no resulta.

Estoy usando las siguientes instrucciones

Dim appExcel As New Excel.Application
Dim xlsLibro As Excel.Workbook
Dim xlsHoja As Excel.Worksheet
Dim xlsRango As Excel.Range


xlsLibro = appExcel.Workbooks.Add
xlsHoja = xlsLibro.Worksheets.Add


<Sentencias> ...


xlsLibro.SaveAs(ARCHIVO_DETA)

xlsLibro.Close()
appExcel.Quit


Pero como dije no me cierra el componente abierto sin embargo la planilla excel se genera bien.

Saludos y agraderecé cualquier ayuda.
  #2 (permalink)  
Antiguo 01/12/2003, 11:52
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Hola.., ya probaste con ésto:

Cita:
xlsLibro.SaveAs(ARCHIVO_DETA)

xlsLibro.Close(SaveChanges:=False )
appExcel.Quit
Saludos y suerte
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 01/12/2003, 12:58
 
Fecha de Ingreso: abril-2002
Mensajes: 20
Antigüedad: 22 años
Puntos: 0
Hola RootK, te agradezco tu ayuda pero no me funcionó. Igual el componente permanece activo y no se elimina.

Gracias igual

Saludos...
  #4 (permalink)  
Antiguo 11/12/2003, 07:11
 
Fecha de Ingreso: abril-2002
Mensajes: 20
Antigüedad: 22 años
Puntos: 0
Hola a todos, ya encontré la solución.

En parte me ayudo el dato de RootK, pero además se debe utilizar el recolector de basura, el cual se encarga de librerar de la memoria aquellos procesos inactivos y que por algún motivo no se decargaron.

La instrucción es GC.Collect() y la coloqué después de cerrar la excel, sin embargo existen algunos ocaciones en que esto no es suficiente, por ejemplo al hacerle download al archivo excel, y le indico un nombre de archivo existente y además en uso el proceso retorna un error y el componente excel se cierra pero el GC.Collect() no alcanza a limpiarlo. Esto lo solucione colocando también el GC.Collect() en el evento Page_Unload y además en el Page_Load , con lo cual se acabaron mis problemas, el componente excel se descarga sin ningún problema (al menos hasta aqui y he hecho varias pruebas).

Bueno espero que le sirva a Alguien.

Saludos

Christian.
  #5 (permalink)  
Antiguo 11/12/2003, 11:19
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Que bueno que se solucionó tu problema.., y solo como un dato mas aparte de utilizar el Garbage collection (GC) puedes hacer un Dispose y un Nothing al objeto para que quede totalmente liberado

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 12/12/2003, 13:23
 
Fecha de Ingreso: abril-2002
Mensajes: 20
Antigüedad: 22 años
Puntos: 0
Vale Rootk te lo agradezco.
  #7 (permalink)  
Antiguo 06/10/2004, 07:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 1
Antigüedad: 19 años, 7 meses
Puntos: 0
yo ya lo he probado todo y el excel se sigue quedando... pego el codigo a ver si se me escapa alguna tonteria...

Dim oExcel As New Excel.Application
Dim oBooks As Excel.Workbooks, oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim oSheets As Excel.Sheets


oExcel.Visible = False
oExcel.UserControl = False
oBooks = oExcel.Workbooks
oBooks.Open("prueba.xls")


oBook = oBooks.Item(1)
oSheets = oBook.Worksheets
oSheet = CType(oSheets.Item(1), Excel.Worksheet)



Label1.Text = oSheet.Cells(1, 1).Value
oBook.Close()
oExcel.Quit()

System.Runtime.InteropServices.Marshal.ReleaseComO bject(oBook)
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oBooks)
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oSheets)
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oSheet)
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oExcel)
oBook = Nothing
oBooks = Nothing
oSheets = Nothing
oSheet = Nothing
oExcel = Nothing
System.GC.Collect()


Tengo tambien el collect en el form_unload, lo que no se que es eso del dispose que hablais...
Hago todo lo que dice en
http://support.microsoft.com/default...b;EN-US;317109
y no consigo que se muera el proceso... :(
  #8 (permalink)  
Antiguo 01/12/2004, 06:57
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 19 años, 6 meses
Puntos: 1
Al final esta es la solucion que utilizo un poco chapucera, pero la pongo aqui por si a alguien le interesa o la puede mejorar y asi aprendemos todos ;)

private void cerrarProceso()
{
// Se recorren todos los procesos llamados Excel y se cierra el que lleva menos tiempo abierto
// ya que sino no se cierra
System.Diagnostics.Process[] procs;
procs = System.Diagnostics.Process.GetProcessesByName("EXC EL");
if (procs.Length>0)
{
DateTime fecha=procs[0].StartTime;
int proceso=0;
for (int p=1;p<procs.Length;p++)
{
if (fecha< procs[p].StartTime)
{
fecha=procs[p].StartTime;
proceso=p;
}
}
procs[proceso].Kill();
}
}


http://hhdirecto.webcindario.com
  #9 (permalink)  
Antiguo 18/07/2008, 18:52
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Cerrar un componente Excel.

=O muchas gracias wakewakeup de todas las opciones que vi esta es la unica que me resulto, gracias por compartir tus conocimientos con la comunidad

Saludos!!!
  #10 (permalink)  
Antiguo 22/07/2008, 17:58
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Respuesta: Cerrar un componente Excel.

wow, ya no me acordaba de éste post . . . 01-dic-2004, 06:57
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:13.