Page 1 of 1

Problema con tExcel y Office 2007

Posted: Wed Apr 08, 2009 4:53 pm
by ralph
Amigos:

Tengo una aplicacion que abre una plantilla en Excel y llena unos valores en ciertas celdas, usando la clase tExcels.
En Win xP con office 2003 corre normal y abre la hoja excel en un rango de 1 a 3 segundos.
La misma aplicacion la ejecuto en otras maquinas con Windows Vista y Excel 2007 y se demora en abrir un parto! de 3 a 7 minutos. Alguien sabe a que puede deberse? He desactivado los antivirus (McAfee) pero nada. Al parecer el problema es el Windows Vista.

Aqui mi programa, a ver si alguien me da una ayuda!

Code: Select all

#include "fivewin.ch"

//-------------------------
Static Function Main()
//-------------------------
local cFile, cFileO, cFileDest, cRuta := curDrive() + ":\" + curDir()  + "\"
local cext := ".xls"

cFile := "OrdenCompra"+cext
if !file(cFile)
   Msginfo("no se encontro file "+cFile,"Error")
   return nil
endif
cFileDest := cRuta+"OrdCom01"+cext
lOver := .f.
if file(cFileDest)
   lOver := MsgYesNo("Ya existe el archivo "+cFileDest+CRLF+"desea sobreescribirlo?","Confirme")
else
   lOver := .t.
endif
if lOver
   CopyFile(cFile, cFileDest)

  TRY
   cOrigen := cFileDest

   oExcel := TExcelScript():New()    
   oExcel:Open( cOrigen )  // <----- aqui la demora!!!!!
   oExcel:Visualizar(.f.)

   oExcel:Say(  8,  6,    "VALOR1" )
   oExcel:Say(  9,  6,    "VALOR2")

   nRow := 17
   nC := 0
   do while nC < 25
      ++nC
      oExcel:Say(nRow,  1, nC )
      oExcel:Say(nRow,  2, "PROD1" )
      oExcel:Say(nRow,  3, "DESCRIPCION1" )
      nRow++
   enddo

   oExcel:Save()
   oExcel:End(.T.) ; oExcel := NIL
  CATCH oError
      MsgStop(oError:Operation+CRLF+oError:Description,"Falla al cargar Excel")
  END
endif
ShellExecute( , "Open", cFileDest, , , 0 )

return NIL


Re: Problema con tExcel y Office 2007

Posted: Wed Apr 08, 2009 5:12 pm
by Garbi
Yo abro una hoja de calculo asi y funciona perfectamente.

ShellExecute(oApp:oWndMain,Nil,oApp:cDbf+"controlman.xls","","",WM_SETFOCUS)

oApp:oWndMain ->Window principal del programa
oApp:cDbf ->ruta del fichero

Un cambio que veo con tu codigo es tu tienes "Open" y yo Nil

Re: Problema con tExcel y Office 2007

Posted: Wed Apr 08, 2009 5:41 pm
by andresreyes_mzt
Hola ralph,

el problema hasta donde veo, con el ShellExecute es el ultimo parametro que tienes a 0

ShellExecute( , "Open", cFileDest, , , 0 )

que indica el modo en que se va a mostrar el archivo que estas abriendo.

SW_HIDE es 0
SW_SHOWNORMAL es 1

por consiguiente la ventana que abres, se muestra oculta. los siguientes son los posible valores que puede tomar ese parametro.
nShowCmd

If lpFile specifies an executable file, nShowCmd specifies how the application is to be shown when it is opened. This parameter can be one of the following values:

Value - Meaning

SW_HIDE - Hides the window and activates another window.
SW_MAXIMIZE - Maximizes the specified window.
SW_MINIMIZE - Minimizes the specified window and activates the next top-level window in the Z order.
SW_RESTORE - Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when restoring a minimized window.
SW_SHOW Activates the window and displays it in its current size and position.
SW_SHOWDEFAULT - Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window.
SW_SHOWMINIMIZED Activates the window and displays it as a minimized window.
SW_SHOWMINNOACTIVE - Displays the window as a minimized window. The active window remains active.
SW_SHOWNA - Displays the window in its current state. The active window remains active.
SW_SHOWNOACTIVATE - Displays a window in its most recent size and position. The active window remains active.
SW_SHOWNORMAL - Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.

Saludos,

Andres Reyes Hernandez.

Re: Problema con tExcel y Office 2007

Posted: Wed Apr 08, 2009 11:05 pm
by ralph
el problema no es con el Shellexecute() sino, como lo muestro en el programa:

oExcel:Open( cOrigen ) // <----- aqui la demora!!!!!

Una vez que se cargan los datos, la hoja abre en tiempo razonable.

Les envio un ejecutable para que lo puedan testear: http://www.solupymes.com/fwin/test.zip

Saludos