Abrir archivo de Excel en formulario de FOX

5,350 views
Skip to first unread message

Julio Cesar Vente Ruiz

unread,
Jan 25, 2011, 12:52:54 AM1/25/11
to Comunidad de Visual Foxpro en Español
Saludos colegas...

Alguno de ustedes sabe como puedo abrir un archivo de Excel (y de
Word) en una venta (formulario) de FOX, es decir que pareciera que es
mi aplicacion la que abre el archivo. y si es posible elegir como
deseo abrirlo, escritura o solo lectura.

De antemano muchas gracias...

Osvaldo Gambarte

unread,
Jan 25, 2011, 7:30:08 AM1/25/11
to jvent...@gmail.com, publice...@googlegroups.com

Proba con este pedazo de codigo

        cFileName = GETFILE("xls","Ingrese","Grabar",2,"Archivo en Excel donde se mostraràn los datos ")
        COPY TO (cFileName) TYPE XLS
        MESSAGEBOX("Datos copiados con éxito",64,"Atención")

        IF MESSAGEBOX("Desea abrir el archivo generado ?",4+32+256,"Atención")=6
            DECLARE INTEGER ShellExecute IN shell32.DLL ;
                INTEGER hndWin, ;
                STRING cAction, ;
                STRING cFileName, ;
                STRING cParams, ;
                STRING cDir, ;
                INTEGER nShowWin

            cAction = "open"
            ShellExecute(0,cAction,cFileName,"","",1)
        ENDIF


> Date: Mon, 24 Jan 2011 21:52:54 -0800
> Subject: [vfp] Abrir archivo de Excel en formulario de FOX
> From: jvent...@gmail.com
> To: publice...@googlegroups.com

Julio Cesar Vente Ruiz

unread,
Jan 25, 2011, 8:17:00 AM1/25/11
to publice...@googlegroups.com
Gracias Osvaldo, el codigo funciona muy bien, pero no es lo que necesito,  quiero habrir el archivo de Excel y que se muestre en una ventana de FOX....

Es esto posible para el zorro....??
--


Julio Cesar Vente Ruiz

Jairo Miranda

unread,
Jan 25, 2011, 8:47:51 AM1/25/11
to publice...@googlegroups.com
En el formulario coloca el objeto OLE , seleccionas Create From File (Crear
desde archivo externo),
Seleccionas tu hoja de Excel o Word, y el hará un Hipervínculo a el archivo
, y lo podras habrir desde fox dando un clik o dobrel click

Que hace fox?, simplemente utiliza la función OLE , (Objeto Incrustado) y te
permite manipular el archivo Word o Excel desde fox.

Con este truco puedes verificar si el cliente tiene istalado el Excel

Declare Integer FindWindow In WIN32API ;
String cNull, String cWinName
********************
nOk = FindWindow("XLMAIN", 0)
*WAIT WINDOW "Excel"+Iif(nOk > 0,""," no está")+" ejecutándose"
*=MESSAGEBOX( "Excel"+Iif(nOk > 0,""," no está")+" ejecutándose",16+1, "!!!
Atención...")
IF nOk = 0
=MESSAGEBOX("Lo siento no se ha podido detectar que el programa de excel
este ejecutandode en este equipo, por favor si lo tiene instalado habralo, o
de no notifique a su administrador del sistema",16+1,"!!!Atención....")
*RETURN
ELSE
* continuar no hay problem
ENDIF


jairo


-----Mensaje original-----
De: publice...@googlegroups.com
[mailto:publice...@googlegroups.com] En nombre de Julio Cesar Vente
Ruiz
Enviado el: Martes, 25 de Enero de 2011 00:53
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Abrir archivo de Excel en formulario de FOX

Julio Cesar Vente Ruiz

unread,
Jan 25, 2011, 10:05:51 AM1/25/11
to publice...@googlegroups.com
Gracias Jairo por tu respueta,
Te comento ya he echo la prueba con lo que me envias, pero primero: Efectivamente me muestra el archivo, pero solo me muestra una hoja,  si le doy doble click permite modificar el archivo y seleccionar otras hojas del archivo. hago clic por fuera del control OLE y queda nuevamente "bloqueado" pero se distorciona la imagen.

Segundo: como hago en modo ejecución para asignarle el archivo...???

Saludos..

tonny chuya

unread,
Jan 27, 2011, 8:35:03 PM1/27/11
to publice...@googlegroups.com
Buens noches jairo disculpa soy nuevo con esto de foxpro9 pero tengo un detalleb don de coloco cada codigo que expones por ejemplo este :
 

Declare Integer FindWindow In WIN32API ;
String cNull, String cWinName
********************
nOk = FindWindow("XLMAIN", 0)
*WAIT WINDOW  "Excel"+Iif(nOk > 0,""," no está")+" ejecutándose"
*=MESSAGEBOX( "Excel"+Iif(nOk > 0,""," no está")+" ejecutándose",16+1, "!!!
Atención...")
IF nOk = 0
  =MESSAGEBOX("Lo siento no se ha podido detectar que el programa de excel
este ejecutandode en este equipo, por favor si lo tiene instalado habralo, o
de no notifique a su administrador del sistema",16+1,"!!!Atención....")
  *RETURN
ELSE
  * continuar no hay problem
ENDIF
 
es que me da el siguiente error "Command contains unrecognized phrase/keyword"
por si acaso lo coloque en un command button....
--
T.S.U En Informatica

tonny chuya

unread,
Jan 27, 2011, 8:52:01 PM1/27/11
to publice...@googlegroups.com
He revisado ando en mi ingnorancia total claro esta ando aprendiendo a ver como funciona... pero realmente es algo frustate no realizar nada, sera que con este codigo se me reflejara algo dentro del formulario en el cual estoy tratando que aparezca por favor orientenme se lo agradeceria de corazon
--
T.S.U En Informatica

Miguel Canchas

unread,
Jan 28, 2011, 8:26:47 AM1/28/11
to publice...@googlegroups.com

A mi me funciona bien el código

 

MK

Miguel Canchas

unread,
Jan 28, 2011, 8:32:32 AM1/28/11
to publice...@googlegroups.com

El codigo solo te avisa si esta “abierto” o no Excel, nada mas.

 

Si quieres abrir Excel usa este código :

 

Con este código enviaba datos a Excel

 

 

*Do Excel With 'Titulo','TablaoCursor',5,'Caption1','Caption2'

 

Y lo ejecutas como esta arriba con do.

 

Graba esto en un excel.prg

 

lparam cTit,nTabla,nCampos,Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9,Param10,Param11,;

Param12,Param13,Param14,Param15,Param16,Param17,Param18,Param19,Param20,Param21,Param22,Param23,Param24, Param25, Param26

***********************------------***********************

* cTit   = Titulo

* nTabla = Nombre de la Tabla o cursor

* nCampos = # de Campos a usarse

* Param1-22 = Caption´s,al final de los parametros dados poner ( " " )

 

*Me canse de hacer un reporte de Excel para cada uno Mejor uno generico y se acabo el asunto " (;o) "

* Miguel Canchas - Spider Soft

***********************------------***********************

Hojacalculo = CreateObject("excel.application")

XLApp = HojaCalculo &&.application

XLApp. Visible = .t.

XLApp.Workbooks.Add

XLApp.ActiveWindow.Zoom = 90 && Zoom 90%

XLSheet = XLApp.Activesheet

XLSheet.Name = "Datos"

cCad = 'BCDEFGHIJKLMNOPQRSTUVWXYZ'

_Cad = ''

Sele &nTabla

Afield(Arrau)

For i = 1 To nCampos

      nCam = Field(i)

      _Cad = _Cad + nCam + ',' && cadena con los campos del cursor 

     

      cEx  = Subst(cCad,i,1) && tomando la columna el nombre de la columna

      XLSheet.Columns("&cEx:&cEx").Select && tomando la columna

      Do Case

            Case Type(nCam) = 'D'

                  XLApp.Selection.NumberFormat = "mm/dd/yyyy"          && si es fecha

            Case Type(nCam) = 'C'

                  XLApp.Selection.NumberFormat = "@"  && si es caracter

            Case Type(nCam) = 'N'

        If Arrau(i,4) = 0

                   XLApp.Selection.NumberFormat = "0" && si es numerico sin decimales

              Else

                   XLApp.Selection.NumberFormat = "0.00" && si es numerico con decimales

              Endif

      EndCase

EndFor

*text to INSTRUCCION noshow

 

_Cad = Subst(_Cad,1,len(_Cad)-1)  && limpiando la cadena con los campos

 

      Subst(_Cad,1,len(_Cad)-1)  && limpiando la cadena con los campos

*endtext

 

*Sele instruccion From &nTabla Into Cursor _datw  && cursor con los campos

 

Sele &_Cad From &nTabla Into Cursor _datw  && cursor con los campos

 

XLSheet.Cells(1,1).value = cTit

XLSheet.Cells(1,1).Font.Bold = .T.

XLSheet.Cells(1,1).Font.Size = 11

XLSheet.Cells(1,1).Font.Name = "Arial"

XLSheet.Cells(1,1).Font.ColorIndex = 5

 

*Sele _datw

Sele &nTabla

IF RECCOUNT() = 0

      RETURN 0

ENDIF

*_VFP.DataToClip(nTabla,,3) && Tomando datos

_VFP.DataToClip('_datw',,3) && Tomando datos

XLSheet.CELLS(2,2).SELECT

XLSheet.Paste  && Pegar datos

ll = 0     

cCad = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

For i = 2 To pcount() - 3 && Parametros recibidos menos los 3 primeros que son titulo,tabla y # campos

      ll = ll + 1

      xPar  = 'Param'+Allt(Str(ll)) && Valor del parametro recibido

      XLSheet.Cells(2,i).value = &xPar && Mandando el valor del parametro recibido

      If i = 2   

            cAx = Subst(cCad,i,1)

      Else

            cEx = Subst(cCad,i,1)

      Endif

*     XLSheet.Columns("&cEx:&cEx").Select

*     XLSheet.Columns("&cEx:&cEx").EntireColumn.AutoFit   

     

      xlp = cEx + '2'

      XLSheet.Range("B2:&xlp").Interior.ColorIndex = 36

      XLSheet.Range("B2:&xlp").Font.Bold = .T.

      XLSheet.Range("B2:&xlp").Font.ColorIndex = 1

      XLSheet.Range("B2:&xlp").HorizontalAlignment = 3

EndFor           

      XLSheet.Columns("&cAx:&cEx").Select

      XLSheet.Columns("&cAx:&cEx").EntireColumn.AutoFit   

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de tonny chuya


Enviado el: jueves, 27 de enero de 2011 08:52 p.m.
Para: publice...@googlegroups.com

chuyat...@gmail.com

unread,
Jan 28, 2011, 8:47:51 AM1/28/11
to publice...@googlegroups.com
Ok muchas gracias otra pregunta pero esto aparecera dentro del form..??? Es que lo vi asi en vb y me gusto y quiero hacer algo parecido muchas gracias amigo

Este mensaje ha sido enviado gracias al servicio BlackBerry de Movilnet


From: "Miguel Canchas" <mcan...@ximesa.com>
Date: Fri, 28 Jan 2011 08:32:32 -0500
Subject: RE: [vfp] Abrir archivo de Excel en formulario de FOX

     _Cad =_Cad + nCam + ',' && cadena con los campos del cursor 

     

      cEx  = Subst(cCad,i,1) && tomando la columna el nombre de la columna

      XLSheet.Columns("&cEx:&cEx").Select && tomando la columna

      Do Case

            Case Type(nCam) = 'D'

                  XLApp.Selection.NumberFormat = "mm/dd/yyyy"          && si es fecha

            Case Type(nCam) = 'C'

                  XLApp.Selection.NumberFormat = "@"  && si es caracter

            Case Type(nCam) = 'N'

        If Arrau(i,4) = 0

                   XLApp.Selection.NumberFormat = "0" && si es numerico sin decimales

              Else

                   XLApp.Selection.NumberFormat = "0.00" && si es numerico con decimales

              Endif

      EndCase

EndFor

*text to INSTRUCCION noshow

 

_Cad = Subst(_Cad,1,len(_Cad)-1)  && limpiando la cadena con los campos

 

      Subst(_Cad,1,len(_Cad)-1)  && limpiando la cadena con los campos

*endtext

 

*Sele instruccion From &nTabla Into Cursor_datw  && cursor con los campos

chuyat...@gmail.com

unread,
Jan 28, 2011, 8:49:25 AM1/28/11
to publice...@googlegroups.com
Si eso lo solucione amigo el detalle es q quiero q aparezca la hoja de excvel dentro del formulario amigo gracias por la ayuda

Este mensaje ha sido enviado gracias al servicio BlackBerry de Movilnet


From: "Miguel Canchas" <mcan...@ximesa.com>
Date: Fri, 28 Jan 2011 08:26:47 -0500
Subject: RE: [vfp] Abrir archivo de Excel en formulario de FOX

Yvan GMAIL

unread,
Jan 28, 2011, 8:52:31 AM1/28/11
to publice...@googlegroups.com

Hace tiempo publicaron en este foro  un truco de ver el pdf dentro de un form.. me imagino que será igual.

Yvan GMAIL

unread,
Jan 28, 2011, 8:59:20 AM1/28/11
to publice...@googlegroups.com

Por lo que veo tienes que insertar un control activeX para visualizar el documento word dentro formulario..

Parecido a este codigo que es para el pdf

 

Acá hay otra forma, en el init del form pongo esto

 

 

This.AddObject("owb","oleControl","Shell.Explorer.2")

This.oWb.Top = 0

This.oWb.Left = 0

This.oWb.Width = Thisform.Width

This.oWb.Height = Thisform.Height

This.oWb.Visible = .T.

This.oWb.Anchor = 240

 

This.AddProperty("cPDFFileName","")

This.AddProperty("nPdfLoadTimeout",30)

 

* Get PDF file name

Thisform.cPdfFileName = Getfile("pdf")

 

* Display the name in the textbox

This.Caption = Thisform.cPdfFileName

If Not Empty(Thisform.cPdfFileName)

            * Display PDF

            Thisform.ShowPdf()

Endif

 

 

 

luego el método showpdf contiene esto:

 

Local lnSeconds

* Clear Web browser control by loading blank page

Thisform.oWB.Object.Navigate2("About:Blank")

* Wait for load to complete

lnSeconds = Seconds()

Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState <> 4) ;

                        AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout

            DoEvents

Enddo

 

* Load PDF

Wait Window Nowait "Cargando PDF ..."

Thisform.oWB.Object.Navigate2(Thisform.cPdfFileName)

* Wait for PDF to load

lnSeconds = Seconds()

Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState <> 4) ;

                        AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout

            DoEvents

Enddo

Wait Clear

 

* PDF display can be adjusted as shown in AdjustPdfView method

*   Uncomment next line if you want to do that and add AdjustPdfView method to the form/class

*This.AdjustPdfView()

 

 

De: Yvan GMAIL [mailto:yvan.c...@gmail.com]
Enviado el: Viernes, 28 de Enero de 2011 08:53 a.m.
Para: 'publice...@googlegroups.com'
Asunto: RE: [vfp] Abrir archivo de Excel en formulario de FOX

 

Hace tiempo publicaron en este foro  un truco de ver el pdf dentro de un form.. me imagino que será igual.

 


Enviado el: Viernes, 28 de Enero de 2011 08:49 a.m.

chuyat...@gmail.com

unread,
Jan 28, 2011, 9:23:01 AM1/28/11
to publice...@googlegroups.com
Ya lo pruebo Yvan muchas gracias y por el tiempo dedicado a resolver estos pequeños problemas para ustedes pero muy grandes para quienes nos estamos inicialdo salidos y gracias

Este mensaje ha sido enviado gracias al servicio BlackBerry de Movilnet


From: "Yvan GMAIL" <yvan.c...@gmail.com>
Date: Fri, 28 Jan 2011 08:59:20 -0500

tonny chuya

unread,
Jan 28, 2011, 1:20:11 PM1/28/11
to publice...@googlegroups.com
Bueno he hecho las cosas pero ahi un detallito de donde saco el Thisform.ShowPdf() siempre me manda ese mansaje y no se donde sacarlo no se por q:::???
--
T.S.U En Informatica

Jairo Miranda

unread,
Jan 28, 2011, 4:07:03 PM1/28/11
to publice...@googlegroups.com

Perdonen por no responder estaba ocupado en otra parte .  y a hasta ahora he vuelto

 

La primera línea de código si,, avisa si existe Excel instalado  con el fin de que el cliente pueda abrir el archivo mas tarde

 

 

Jairo

tonny chuya

unread,
Jan 28, 2011, 5:55:20 PM1/28/11
to publice...@googlegroups.com
Enverdad siento que ya estoy muy latoso con esto y de corazon lo siento mucho he intentado la mil y una formas para poder hacer esto pero nada me resulta me gustaria que alguien me diera los pasos y donde va cada linea de codigo que colocare a continuacion ahi algunas que me dice pero otras realmente no se donde va.... la ultima parte la coloque en un command button pero no se si sera asi por q todo el tiempo me da un error que es el siguiente:
 
" Property showpdf is not found "
 
 
en el init
---------------------------------------
This.AddObject("owb","oleControl","Shell.Explorer.2")
This.oWb.Top = 0
This.oWb.Left = 0
This.oWb.Width = Thisform.Width
This.oWb.Height = Thisform.Height
This.oWb.Visible = .T.
This.oWb.Anchor = 240
 
This.AddProperty("cPDFFileName","")
This.AddProperty("nPdfLoadTimeout",30)
 
* Get PDF file name
Thisform.cPdfFileName = Getfile("pdf")
 
* Display the name in the textbox
This.Caption = Thisform.cPdfFileName
If Not Empty(Thisform.cPdfFileName)
            * Display PDF
           Thisform.ShowPdf()
Endif
 
-------------------------------------------------------------------------------------------------------
y este yo lo coloco en un command button
 
Local lnSeconds
*Clear Web browser control by loading blank page

Thisform.oWB.Object.Navigate2("About:Blank")
* Wait for load to complete
lnSeconds = Seconds()
Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState <> 4) ;
                        AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout
            DoEvents
Enddo
 
*Load PDF

Yvan GMAIL

unread,
Jan 28, 2011, 6:13:25 PM1/28/11
to publice...@googlegroups.com

Tonny,

Esto lo pasé como referencia.. pero no es exactamente lo que tu necesitas.. pero si de todas maneras quieres  hacerlo funcionar-

 

Primero crea un método  llamado showpdf y pegas el código allí .. (Menu Formulario.. Nuevo Metodo.)

 

Te adjunto el form de ejemplo.. lo probé con Excel.. pero lo abre en una nueva ventana.. en cambio pdf si.. Me imagino que para Excel. Debes insertar un control active X.. y enlazarlo con el doverb creo.. estoy dando pistas. Nomás.

 

 

 

 

luego el método showpdf contiene esto:

 

Local lnSeconds

* Clear Web browser control by loading blank page

Thisform.oWB.Object.Navigate2("About:Blank")

* Wait for load to complete

lnSeconds = Seconds()

Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState <> 4) ;

                        AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout

            DoEvents

Enddo

 

* Load PDF

Wait Window Nowait "Cargando PDF ..."

Thisform.oWB.Object.Navigate2(Thisform.cPdfFileName)

* Wait for PDF to load

lnSeconds = Seconds()

Do While (Thisform.oWB.Object.Busy Or Thisform.oWB.Object.ReadyState <> 4) ;

                        AND (Seconds() - lnSeconds) < This.nPdfLoadTimeout

            DoEvents

Enddo

Wait Clear

 

 

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de tonny chuya
Enviado el: Viernes, 28 de Enero de 2011 05:55 p.m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] Abrir archivo de Excel en formulario de FOX

 

Enverdad siento que ya estoy muy latoso con esto y de corazon lo siento mucho he intentado la mil y una formas para poder hacer esto pero nada me resulta me gustaria que alguien me diera los pasos y donde va cada linea de codigo que colocare a continuacion ahi algunas que me dice pero otras realmente no se donde va.... la ultima parte la coloque en un command button pero no se si sera asi por q todo el tiempo me da un error que es el siguiente:

Form.rar

tonny chuya

unread,
Jan 28, 2011, 6:18:15 PM1/28/11
to publice...@googlegroups.com
muchas gracias Yvan ya asi ya tengo una idea de donde mas o menos comezar muchas gracias y disculpa por tanto lata osea fastidio muchas gracias eternamente agradecido
--
T.S.U En Informatica

tonny chuya

unread,
Jan 28, 2011, 9:47:05 PM1/28/11
to publice...@googlegroups.com
nada sigo dando patas de ahogado jejeeje no he podido hacer nada mas chimbo
--
T.S.U En Informatica

Yvan GMAIL

unread,
Jan 28, 2011, 10:46:08 PM1/28/11
to publice...@googlegroups.com

Cheka este link… lo he probado en windows 7.. y no logro.. no se si en xp si funciona bien. Pero supuestamente si deberia funcionar.

http://social.msdn.microsoft.com/forums/en-US/visualfoxprogeneral/thread/df407d5d-5f41-48b9-9c35-d37c7266dd99

Julio Cesar Vente Ruiz

unread,
Feb 13, 2011, 10:15:24 AM2/13/11
to publice...@googlegroups.com
Hola el ejemplo esta bueno gracias, pero resulta que los libros de Excel tienen mas de una hoja de calculo y con el ejemplo del link solo se puede ver la hoja activa del libro dentro de una ventana de fox.  Es decir no permite navegar por el libro de excel solo visualiza lo que hay en la primera hoja.

Si alguien sabe como abrir excel dentro de un formulario de Fox por favor ayuden nos con un ejemplo practico.

Saludos...

Enzo Canelo

unread,
Apr 23, 2014, 7:43:26 AM4/23/14
to publice...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages