Excel se queda abierto en el administrador de tareas

Excel se queda abierto en el administrador de tareas

Postby hmpaquito » Wed Dec 22, 2021 11:17 am

Buenas,

En alguno de mis varios programas es probable que se quede abierta alguna instancia de excel. Probablemente hay algun error de ejecucion y por eso no se cierra la instancia de excel, aunque tengo un exit procedure para tratar de cerrarlas todas aun con error.
¿ Alguna manera se os ocurre de saber el origen de una instancia de excel estando en el administrador de tareas ?

Image
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Excel se queda abierto en el administrador de tareas

Postby karinha » Wed Dec 22, 2021 1:39 pm

Português:

Usando Winexec("CMD /C tasklist > C:\proc.txt") você terá uma lista de todos os processos sendo executados no momento.

Pelo seu sistema, você pode ler este TXT salvando numa array, exibir em tela todos os processos e criar um botão fechar programa, que fará:

Winexec("taskkill /PID id") onde 'id' é o identificador do processo.

Español:

Usando Winexec ("CMD /C tasklist > C:\proc.txt") obtendrá una lista de todos los procesos en ejecución.

En su sistema, puede leer este TXT guardado en una matriz, mostrar todos los procesos en la pantalla y crear un botón para cerrar el programa, lo que hará:

Winexec ("taskkill / PID id") donde 'id' es el identificador del proceso.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Excel se queda abierto en el administrador de tareas

Postby karinha » Wed Dec 22, 2021 2:19 pm

Code: Select all  Expand view

/*
 * Harbour Project source code
 *
 * hbole library demo/test code
 *
 * Copyright 2007 Enrico Maria Giordano e.m.giordano at emagsoftware.it
 * Copyright 2009 Mindaugas Kavaliauskas
 * Copyright 2008 Viktor Szakats (vszakats.net/harbour)
 *    Exm_CDO(), Exm_OOOpen(), Exm_CreateShortcut()
 *
 * www - http://harbour-project.org
 *
 */


#include "FiveWin.ch"
#require "hbwin"

PROCEDURE Main()

   Exm_MSExcel()

RETURN NIL

FUNCTION Exm_MSExcel()

   LOCAL oExcel, oWorkBook, oWorkSheet, oAS
   LOCAL nI, nCount

   IF ( oExcel := win_oleCreateObject( "Excel.Application" ) ) != NIL

      oWorkBook := oExcel:WorkBooks:Add()

      // Enumerator test
      FOR EACH oWorkSheet IN oWorkBook:WorkSheets

        SYSREFRESH()

         ? oWorkSheet:Name

      NEXT

      // oWorkBook:WorkSheets is a collection
      nCount := oWorkBook:WorkSheets:Count()

      // Elements of collection can be accessed using :Item() method
      FOR nI := 1 TO nCount

         SYSREFRESH()

         ? oWorkBook:WorkSheets:Item( nI ):Name

      NEXT

      // OLE also allows to access collection elements by passing
      // indices to :Worksheets property

      FOR nI := 1 TO nCount

         SYSREFRESH()

         ? oWorkBook:WorkSheets( nI ):Name

      NEXT

      oAS := oExcel:ActiveSheet()

      // Set font for all cells
      oAS:Cells:Font:Name := "Arial"
      oAS:Cells:Font:Size := 12

      oAS:Cells( 1, 1 ):Value := "OLE from Harbour"
      oAS:Cells( 1, 1 ):Font:Size := 16

      // oAS:Cells( 1, 1 ) is object, but oAS:Cells( 1, 1 ):Value has value of the cell

      // ? "Object valtype:", ValType( oAS:Cells( 1, 1 ) ), "Value:", oAS:Cells( 1, 1 ):Value

      oAS:Cells( 3, 1 ):Value := "String:"
      oAS:Cells( 3, 2 ):Value := "Hello, World!"

      oAS:Cells( 4, 1 ):Value := "Numeric:"
      oAS:Cells( 4, 2 ):Value := 1234.56
      oAS:Cells( 4, 3 ):Value := oAS:Cells( 4, 2 ):Value
      oAS:Cells( 4, 4 ):Value := oAS:Cells( 4, 2 ):Value
      oAS:Cells( 4, 3 ):Value *= 2
      oAS:Cells( 4, 2 ):Value++

      oAS:Cells( 5, 1 ):Value := "Logical:"
      oAS:Cells( 5, 2 ):Value := .T.

      oAS:Cells( 6, 1 ):Value := "Date:"
      oAS:Cells( 6, 2 ):Value := Date()

      oAS:Cells( 7, 1 ):Value := "Timestamp:"
      oAS:Cells( 7, 2 ):Value := hb_DateTime()

      // Some formatting
      oAS:Columns( 1 ):Font:Bold := .T.
      oAS:Columns( 2 ):HorizontalAlignment := - 4152  // xlRight

      oAS:Columns( 1 ):AutoFit()
      oAS:Columns( 2 ):AutoFit()
      oAS:Columns( 3 ):AutoFit()
      oAS:Columns( 4 ):AutoFit()

      oAS:Cells( 3, 2 ):Font:ColorIndex := 3  // red

      oAS:Range( "A1:B1" ):HorizontalAlignment := 7
      oAS:Range( "A3:A7" ):Select()

      oExcel:Visible := .T.

      oExcel:Quit()

      oExcel := NIL

   ELSE

      ? "Error: MS Excel not available. [" + win_oleErrorText() + "]"

   ENDIF

RETURN NIL
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Excel se queda abierto en el administrador de tareas

Postby hmpaquito » Thu Dec 23, 2021 11:21 am

Ya lo he solucionado.

El problema era este:

El programador de tareas lanzaba a la vez varios ejecutables mios que utilizaban una misma excel.
Al abrir (createobject() ) la misma excel en el mismo ordenador excel aparecia un dialogo de advertencia que necesitaba pulsar "Cancelar", solo que no se veia porque el origen era una tarea programada.
Ha sido suficiente con poner
Code: Select all  Expand view
oExcel:DisplayAlerts:= .f.


Gracias Karinha en todo caso
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Excel se queda abierto en el administrador de tareas

Postby artu01 » Fri Dec 24, 2021 2:10 am

y que tal con poner al final de tu prg
Code: Select all  Expand view

release oExcel
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 397
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Excel se queda abierto en el administrador de tareas

Postby hmpaquito » Fri Dec 24, 2021 9:02 am

artu01 wrote:y que tal con poner al final de tu prg
Code: Select all  Expand view

release oExcel
 



Resulta dificil saber las razones por las que excel se queda en el admor. de tareas.
Hasta en los foros VBA se recomienda hacer un

Code: Select all  Expand view
objExcel.Quit
objExcel= Nothing


Mi entorno es rdp. Me da la sensacion de que abrir la misma excel por varios usuarios podria ser fuente de problemas. Pero tampoco, porque antes de abrir hago copia del libro excel por cada usuario.

Uso siempre CreateObject() y nunca GetObject() para intentar aislar los problemas de una instancia excel de otra instancia excel
Para evitar que los errores durante el procesamiento del libro excel dejen colgadas instancias en el admor. de tareas tengo un EXIT PROCEDURE LimpiaExcels() que cierra aquellas que estan abiertas aun al finalizar el programa.

Pero y con todo lo anterior, aun tengo instancias al terminar la aplicacion en el admor. de tareas.

Una posible solucion seria incluir en el EXIT PROCEDURE LimpiaExcels() destruir todos los procesos EXCEL abiertos y que tengan como padre la aplicacion que los lanzo. Estoy lejos aun de saber hacer eso.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 81 guests