PDA

Ver la Versión Completa : Defecto grave de Excel al estar celda en estado de edición


Al González
09-06-2004, 20:03:14
¡Buen día a todos!

Continúo con mi experiencia en el uso de componentes Servers versión Office 97, en Delphi 7. Agradezco a Román su atinada y oportuna respuesta a mi duda anterior (¿Funciona un compilado XP en PC con Office 2000? (http://www.clubdelphi.com/foros/showthread.php?t=11084)). Para mayor compatibilidad, me funciona mejor usar la versión 97 de dichos componentes.

Ahora me encuentro ante una situación extraña, que a primera vista me parece un importante defecto de la biblioteca COM de Excel.

Tengo una aplicación Delphi 7 que utiliza un componente TExcelApplication versión Office 97, para realizar de forma automática ciertas tareas con un libro Excel. Regularmente el usuario tendrá abierto algún documento en Excel antes de ejecutar el proceso de automatización de mi aplicación. El proceso de automatización se realiza correctamente, respetando los demás documentos que el usuario tenga abiertos en ese momento.

Sin embargo, si en ese momento está abierto un libro Excel con una de sus celdas en estado de edición, es decir, con el cursor de teclado parpadeando dentro de ella o en la barra superior de captura, entonces las sentencias que operan sobre el objeto TExcelApplication causan excepciones OLE.

Por ejemplo, una sentencia como

AEAplicacion.Workbooks.Open (....);

Eleva una excepción EOLEException OLE error 800A03EC


Y una sentencia como

AEAplicacion.Cells.Item [1, 1].Select;

Eleva una excepción EOLESysError La llamada fue rechazada por el destinatario

Increíblemente, si en Excel quito el modo de edición de la celda (presionando la tecla Esc, por ejemplo), las sentencias anteriores de mi programa se ejecutan como se espera, sin ningún problema.

Noté que en el entorno de Excel no puede grabarse, ejecutarse o detenerse una macro, cuando una celda se encuentra en estado de edición. Esto me hace suponer que durante el estado de edición de una celda se inhabilita cierta parte de la biblioteca COM de Excel, lo cual causa las excepciones anteriormente mencionadas.

No he encontrado un método QuitEditMode, o algo así, que pueda ejecutar antes que las demás instrucciones para evitar este problema.

Procederé a realizar una prueba temporal con la versión XP de los coponentes Server. Mientras tanto, les agradezco todas las aportaciones que puedan hacer al respecto.

¡Un abrazo!

Al González :).

El azar es el último de los recursos

Al González
09-06-2004, 22:25:39
¡Buen día a todos!

Después de haber realizado algunas pruebas con diferentes versiones y métodos de TExcelApplication, como SendKeys y Activate (los cuales no me fueron útiles en este caso), llegué a la determinación de implementar una solución al viejo estilo ;): El cada vez más típico truco de cambiar de hilo y simular presión de teclas programáticamente.


Uses
GHTareas, GHVentan, GHTecl, Windows;
...
{ Si Excel está abierto y hay una celda activa (probablemente
esa celda se encuentra en estado de edición) }
If AEAplicacion.Visible [Localidad] And
(AEAplicacion.ActiveCell <> Nil) Then
Begin
ActivHiloVent(VentaClas ('XLMAIN')); { Activar Excel }
SimulTecl (vk_Escape); { Simular la presión de la tecla Esc }

{ Esperar a que Excel la procese. Cierra posible caja de
diálogo o... }
Sleep (250);

{ Dos Esc más }
SimulTecl (vk_Escape); { Segunda caja de diálogo o... }
Sleep (250);
SimulTecl (vk_Escape); { ...cancela edición de la celda }
End;


De cualquier forma, sería conveniente encontrar una solución más segura y elegante.

Espero esto sea de utilidad. Seguimos en contacto.

Al González :).

Al González
25-06-2004, 00:07:40
¡Buen día a todos!

¿Sería alguien tan amable de confirmarme si le sucede lo mismo con una aplicación de automatización OLE de Excel?

Muchas gracias.

¡Un abrazo!

Al González :).

roman
25-06-2004, 00:42:51
Sí Al, sucede lo mismo. No parece ser posible evitarlo. Hace tiempo cuando preguntaste esto hice una búsqueda en los foros de noticias de Borland y gente importante comentaba que evitaras hacer eso. Piensa que cuando entras a editar una celda es como si entraras en un estado modal.

Por otra parte no deja de sonarme extraño querer acceder a archivos que están en uso. Pero por el momento pienso que la solución que habías encontrado es lo meor que podrás obtener.

// Saludos

ederfcr
25-06-2016, 02:09:59
Cuales son las unidades mencionadas en el codigo de este hilo.

Tengo ese inconveniente al tratar de exportar hacia Excel97 una tabla de Access y no se como solucionar el problema.


saludos


EderFCR