Timer congelado
Posted: Thu Nov 27, 2014 5:30 pm
Hola a todos, a ver si alguien me puede echar una mano:
¿ Como puedo averiguar si un libro excel tiene password de apertura sin abrirlo ?
Tengo un proceso que ejecuto los fines de semana por ser muy largo, que consiste en abrir muchos libros excel (más de 30.000) para extraer unos datos y pasarlos a una dbf.
El caso es que algunos libros tienen contraseña (que no debo conocer) para poder abrirlo (la contraseña de apertura, no la de protección de las hojas) y cuando intento abrirlo mi programa se queda esperando a que al objeto Excel se le indique la contraseña o se cancele, algo así:
oexcel := CreateObject( "Excel.Application" )
oexcel:DisplayAlerts(.F.)
...
olibro := oexcel:WorkBooks:Open(alltrim(fichero),.f.,.f.)
...
Y cuando el libro tiene contraseña, el programa NO continúa despues del workbooks:open. Lo que quiero conseguir es que en caso de tener contraseña se salte ese libro, pero que en cualquier caso no se interrumpa el proceso.
He probado de todo, e incluso con un timer y no entiendo porqué no funciona:
...
osigo := .f.
DEFINE TIMER oTimerbook INTERVAL 6000 ACTION isopenxls() OF oWnd
ACTIVATE TIMER oTimerbook
osigo := oexcel:WorkBooks:Open(alltrim(fichero),.f.)
oTimerbook:end()
...
function isopenxls()
dbg('osigo = ' + valtype(osigo))
return
Se supone que el timer me debería indicar 'L' pasados unos segundos, pero el caso es que cuando Excel está pidiendo la contraseña, no se ejecuta la función ispoenxls(). Si cambio la linea workbooks:open por un msgalert(), si funciona aunque no salga del msgalert(). ???
En excel existe :haspassword para averiguar si tiene o no password, pero claro primero hay que abrir el libro.
¿Alguna idea ?
Saludos
¿ Como puedo averiguar si un libro excel tiene password de apertura sin abrirlo ?
Tengo un proceso que ejecuto los fines de semana por ser muy largo, que consiste en abrir muchos libros excel (más de 30.000) para extraer unos datos y pasarlos a una dbf.
El caso es que algunos libros tienen contraseña (que no debo conocer) para poder abrirlo (la contraseña de apertura, no la de protección de las hojas) y cuando intento abrirlo mi programa se queda esperando a que al objeto Excel se le indique la contraseña o se cancele, algo así:
oexcel := CreateObject( "Excel.Application" )
oexcel:DisplayAlerts(.F.)
...
olibro := oexcel:WorkBooks:Open(alltrim(fichero),.f.,.f.)
...
Y cuando el libro tiene contraseña, el programa NO continúa despues del workbooks:open. Lo que quiero conseguir es que en caso de tener contraseña se salte ese libro, pero que en cualquier caso no se interrumpa el proceso.
He probado de todo, e incluso con un timer y no entiendo porqué no funciona:
...
osigo := .f.
DEFINE TIMER oTimerbook INTERVAL 6000 ACTION isopenxls() OF oWnd
ACTIVATE TIMER oTimerbook
osigo := oexcel:WorkBooks:Open(alltrim(fichero),.f.)
oTimerbook:end()
...
function isopenxls()
dbg('osigo = ' + valtype(osigo))
return
Se supone que el timer me debería indicar 'L' pasados unos segundos, pero el caso es que cuando Excel está pidiendo la contraseña, no se ejecuta la función ispoenxls(). Si cambio la linea workbooks:open por un msgalert(), si funciona aunque no salga del msgalert(). ???
En excel existe :haspassword para averiguar si tiene o no password, pero claro primero hay que abrir el libro.
¿Alguna idea ?
Saludos