Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2016
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
OleObject y excel

Buen día.

Si me pudieran ayudar estoy tratando con excel mediante OleObject pero al finalizarlo y cerrar el OleObject el proceso de excel se queda en el administrador de tareas tantas veces como ejecute el código.

El código es el siguiente

Código Delphi [-]
function CargStrinGrid(AGrid: TStringGrid;
  AXLSFile: string): Boolean;
const
  xlCellTypeLastCell = $0000000B;
var
  XLApp, Sheet: OLEVariant;
  RangeMatrix: Variant;
  x, y, k, r: Integer;
begin
  Result := False;
  // Create Excel-OLE Object
  XLApp := CreateOleObject('Excel.Application');
  try
    // Hide Excel
    XLApp.Visible := False;
    // Open the Workbook
    XLApp.Workbooks.Open(AXLSFile);
    // Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    // Get the value of the last row
    x := XLApp.ActiveCell.Row;
    // Get the value of the last column
    y := XLApp.ActiveCell.Column;
    // Set Stringgrid's row &col dimensions.
    AGrid.RowCount := x;
    AGrid.ColCount := y;
    // Assign the Variant associated with the WorkSheet to the Delphi Variant
    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    //  Define the loop for filling in the TStringGrid
    k := 1;
    repeat
      for r := 1 to y do
        AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
      Inc(k, 1);
      AGrid.RowCount := k + 1;
    until k > x;
    // Unassign the Delphi Variant Matrix
    RangeMatrix := Unassigned;
  finally
    // Quit Excel
    if not VarIsEmpty(XLApp) then
    begin
//      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
      Result := True;
  end;

No se que error estoy cometiendo he buscado soluciones y como lo tengo es la forma en que lo hacen pero aún así en el administrado de tareas se queda como proceso y no cierra, si alguien me puede colaborar se lo agradecería.
Responder Con Cita
  #2  
Antiguo 06-04-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No es realmente mi area, asi que mientras algun compañero pueda tener una pista o idea mas elaborada, un buen punto de partida es:

El bloque de codigo que pusiste en el finally, se ejecuta? Mejor dicho, a que evalua not VarIsEmpty(XLApp)
Responder Con Cita
  #3  
Antiguo 06-04-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Coincido con Agustín. Debería bastar XLApp.Quit para cerrar la instancia de Excel.

LineComment Saludos
Responder Con Cita
  #4  
Antiguo 07-04-2016
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo esto lo ponddría al revés:

Sheet := Unassigned;
XLAPP := Unassigned;

En alguna ocasión tuve que usar esas asignaciones para que se cerrara bien, no pude dedicarle tiempo, así que no sé decirte que pasa.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 07-04-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
Me uno al monitoreo del post, tengo una aplicación que genera excel y nunca he logrado que se cierren todas las instancias que se generan, algunas se cierran y otras se quedan corriendo.

Suerte!!!
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #6  
Antiguo 07-04-2016
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 910
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Será porque EXCEL tiene libros abiertos y no se ha indicado que acción realizar con ellos?...

Código Delphi [-]
  XLApp := CreateOleObject('Excel.Application');
  try
    // Hide Excel
    XLApp.Visible := False;
    // Open the Workbook
    XLApp.Workbooks.Open(AXLSFile);

    ....
finally

    For loop := 1 to XLApp.Workbooks.Count Do
         XLApp.Workbooks[1].Close[False];  //False=Cerrar sin guardar, True=Guardar y cerrar

    XLApp.Quit;

      Result := True;
  end;

Espero que les ayude...Saludos cordiales
Responder Con Cita
  #7  
Antiguo 09-04-2016
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Código Delphi [-]
  XLApp := CreateOleObject('Excel.Application');
  try
    // Hide Excel
    XLApp.Visible := False;
    // Open the Workbook
    XLApp.Workbooks.Open(AXLSFile);

    ....
finally

    For loop := 1 to XLApp.Workbooks.Count Do
         XLApp.Workbooks[1].Close[False];  //False=Cerrar sin guardar, True=Guardar y cerrar

    XLApp.Quit;

      Result := True;
  end;

Probe tu código y aún me queda el proceso de EXCEL abierto, alguna otra idea se los agradecería

Última edición por Soa Pelaez fecha: 09-04-2016 a las 05:36:53.
Responder Con Cita
  #8  
Antiguo 11-04-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo acabo de probar tu código y no me presenta problemas. ¿No estarás abriendo Excel en otra parte de la aplicación?

LineComment Saludos
Responder Con Cita
  #9  
Antiguo 15-04-2016
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Yo acabo de probar tu código y no me presenta problemas. ¿No estarás abriendo Excel en otra parte de la aplicación?

LineComment Saludos

Yo lo ejecuto en XE8 en windows7 y windows8 y el proceso sigue en el administrador de tareas, alguna solución gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Finalizar proceso OleObject Excel Soa Pelaez Varios 0 30-03-2016 05:15:55
Excel := CreateOleObject ('Excel.Application') calco_hugo Varios 9 20-01-2013 13:50:51
excel a delphi, como mostrar columnas de excel Vyckso Servers 2 13-08-2007 13:38:08
Como Liberar un OleObject ???? AGAG4 Varios 0 13-05-2006 02:55:50
Problema al actualizar Excel 2000 a Excel XP victork_py Servers 1 06-08-2004 20:20:41


La franja horaria es GMT +2. Ahora son las 18:47:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi