FoxPro/Visual FoxPro - Archivo de Excel en uso

 
Vista:

Archivo de Excel en uso

Publicado por Zamora (77 intervenciones) el 21/09/2022 18:38:29
Buen día a todos

Estoy en construcción de una app para emitir correos automáticos, el cual genera también manualmente un archivo de Excel, en caso de que al momento de generar el archivo automáticamente para el correo cabe la posibilidad que se halla creado manualmente y este abierto, como puedo cerrarlo?

STORE FOPEN( "tuArchivo", 2 ) TO nOpen
IF nOpen > 0
=FCLOSE( "tuArchivo" )
DELETE FILE "tuArchivo"
ELSE
WAIT WINDOW "El archivo esta abierto" NOWAIT
Endif

Con esto solo me indica si esta abierto y en uso.

Si me puede ayudar para tomar el control de este, cerrarlo.

De antemano les agradezco el apoyo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Archivo de Excel en uso

Publicado por Fidel José (657 intervenciones) el 24/09/2022 00:04:41
No veo forma de poder cerrar un archivo en una instancia de Excel que no se abrió como un objeto VisualFox.
También hay que prever que el archivo puede estar en uso por un usuario de otro equipo si es que se permite el acceso.

Pero se puede saber si existe la posibilidad de que esté abierto y pedirle al operador que cierre el archivo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PROCEDURE IsOpenOffice
* Comprobar si un archivo Excel o Word
* puede estar en uso (abierto)
* Office crea un archivo con "~$" antepuesto al nombre
* -----------------------------------------------------
* Respuesta: .T. si puede estar abierto
*            .F. si no está abierto
* -----------------------------------------------------
* Se utiliza Scripting.FileSystemObject porque el comando
* nativo File() no reconoce este tipo de archivos
* ------------------------------------------------------
LPARAMETERS tcFileName
 
LOCAL loFso as Object,;
	lcComprob,;
	lExiste
 
	loFso = NEWOBJECT("Scripting.FileSystemObject")
	lcComprob = ADDBS(JUSTPATH(m.tcFileName));
		+ CHR(126)+CHR(36) ;
		+ JUSTFNAME(m.tcFileName)
	lExiste = loFso.FileExists(m.lcComprob)
 
	loFso = NULL
RETURN m.lExiste
ENDPROC

Admitiendo que esto puede fallar, por ejemplo si Excel no se cerró correctamente (corte de luz, plantón, etc), se puede crear un loop de espera con la posibilidad de abortar o intentar de todos modos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DO WHILE .t.
	IF !IsOpenOffice(lcFileName)
		EXIT
	ELSE
		lnResp = MESSAGEBOX(m.lcFileName + "está abierto",2,"Haga algo al respecto",1000)
		DO CASE
			CASE m.lnREsp < 0
 
			CASE m.lnResp = 3
				* Anular
			CASE m.lnResp = 4
				* Reintentar
			CASE m.lnResp = 5
				* Intentar de todos modos
		ENDCASE
	ENDIF
ENDDO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar