Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Defecto grave de Excel al estar celda en estado de edición

¡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?). 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
Código:
AEAplicacion.Workbooks.Open (....);
Eleva una excepción EOLEException OLE error 800A03EC


Y una sentencia como
Código:
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
Responder Con Cita
  #2  
Antiguo 09-06-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Simulación de teclazos ESC

¡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.

Código:
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 .

Última edición por Al González fecha: 09-06-2004 a las 22:28:16.
Responder Con Cita
  #3  
Antiguo 25-06-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡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 .
Responder Con Cita
  #4  
Antiguo 25-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 25-06-2016
ederfcr ederfcr is offline
Registrado
NULL
 
Registrado: jun 2016
Posts: 9
Poder: 0
ederfcr Va por buen camino
AYuda con unidades declaradas en el codigo de este hilo

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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:27:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi