FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Detectar archivo abierto en clase TFileXls
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM
Detectar archivo abierto en clase TFileXls
Posted: Wed Feb 20, 2008 05:07 PM

Uso la clase TFileXls para exportar datos a archivos Excel, todo funciona bien y super rápido; pero resulta que siempre esa exportación la hago a un archivo que tiene siempre el mismo nombre; pero cuando el dichoso archivo esta abierto, se da un problema.

El programa se ejecuta bien, pero el archivo como esta abierto se queda con los datos que tenía originalmente, si cierro el archivo en Excel, e intento de nuevo a creación del archivo Excel ahi si se genera bien.

Que puedo hacer, o que se hace para saber si el archivo esta abierto y previemente cerrarlo.

Saludos

Fernando Espinoza

Saludos



Fernando Espinoza
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Detectar archivo abierto en clase TFileXls
Posted: Wed Feb 20, 2008 08:05 PM

Se me ocurre que tendrías que comprobar la existencia del archivo antes de volver a generarlo

If( File( "c:\excel\archivoExcel.xls" ) )
Return 0
End
CreaArchivoExcel()
Return 0

Saludos

Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM
Detectar archivo abierto en clase TFileXls
Posted: Wed Feb 20, 2008 09:17 PM

Horacio

Ya intente eso, lo que pasa es que no se lo puede borrar al archivo porque esta abierto; entonces lo mejor sería primero cerarlo en Excel y ahi si sobreescribirlo.

Saludos



Fernando Espinoza
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Detectar archivo abierto en clase TFileXls
Posted: Wed Feb 20, 2008 10:10 PM
fespinoza wrote:Horacio

Ya intente eso, lo que pasa es que no se lo puede borrar al archivo porque esta abierto; entonces lo mejor sería primero cerarlo en Excel y ahi si sobreescribirlo.


Utiliza la funcion FOPEN() y que lo intente abrir en EXCLUSIVA, si no puede,
porque esta en uso, entonces ya sabes que esta en uso :-)
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Detectar archivo abierto en clase TFileXls
Posted: Wed Jul 19, 2017 05:34 PM
Buenas tardes para todos

Vuelvo a abrir este hilo.... por que estoy buscando detectar si un archivo en excel esta abierto... , el codigo es el siguiente:

Code (fw): Select all Collapse
If ( nHF := FOPEN("C:\xpmake\dbfs\importar.xlsx", "W" ) ) = -1
  Msginfo( "Archivo Abierto por otro usuario")
Else
  Msginfo( "No hay nadie mas abriendo el archivo")
EndIf


El problema es que siempre dice que no hay nadie mas abriendo el archivo...... devuelve resultados como 1125,1116

De antemano gracias

Saludos
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 24
Joined: Thu Oct 02, 2014 03:51 AM
Re: Detectar archivo abierto en clase TFileXls
Posted: Fri Jul 21, 2017 05:43 PM

Estimado:

            Yo lo que hago es capturar la ventana para verificar si el archivo esta abierto en el excel y mandarlo a cerrar:

              cFile3:='NV'+OT:CMES

                oWndCapt := TWCapture():New( "Microsoft Excel - "+cFile3)
                if oWndCapt:lCaptured

                            MSGALERT('El archivo '+cFile3+' se encuentra en uso.'+CRLF+;
                                             'Cierre el archivo para gener uno nuevo','Archivo abierto')
                            oWndCapt:Setfocus()
                            oWndCapt:End()

                            FOR I:=1 TO 10
                                 oWndCapt := TWCapture():New( "Microsoft Excel - "+cFile3)
                                 if oWndCapt:lCaptured
                                        syswait(4)
                                        IF I == 10
                                                MSGALERT('El archivo '+cFile3+' se encuentra en uso.'+CRLF+;
                                                                 'Cierre el archivo para gener uno nuevo','Archivo abierto')
                                                RETURN NIL
                                        ENDIF
                                 else
                                        EXIT
                                 endif
                            NEXT

                            IF FILE(cFile)
                                FERASE(cFile)
                            ENDIF

                else
  • ? 'no se pudo capturar la ventana'
    endif

Saludos
Daniel Puente
Santa Cruz, Argentina

danielpuente101@gmail.com

Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Detectar archivo abierto en clase TFileXls
Posted: Fri Jul 21, 2017 10:50 PM
Debes cerrar el excel y se cierran las planillas abiertas

Code (fw): Select all Collapse
CerrarProceso ( "EXCEL.EXE" )

....
FUNCTION CerrarProceso ( cProceso )
Local oWMIob, oWMIserver, aProcess, objProcess

try
  oWMIob := CreateObject( "wbemScripting.SwbemLocator" )
  catch
  RETURN nil
END
  oWMIserver := oWMIob:ConnectServer()
  aProcess :=oWMIserver:ExecQuery( "Select * from Win32_Process" )
For Each objProcess in aProcess
  IF UPPER(objProcess:Name) = UPPER(cProceso)
    objProcess:Terminate()
  Endif
next

RETURN nil
Saludos,



Adhemar C.

Continue the discussion