exportar consulta a excel

745 views
Skip to first unread message

Ing.Omar Gonzalez

unread,
Jun 6, 2014, 3:19:10 PM6/6/14
to publice...@googlegroups.com
hola buenas tardes 
tengo unas dudas quisiera saber si me pueden ayudar 
1.- quiero inculir una consulta a un formulario mediante un boton (al ejecutrar el boton me abra la consulta)
2.- exportar la consulta a excel 
trabajo con foxpro 9

me podrian ayudar?

francisco prieto

unread,
Jun 6, 2014, 4:00:14 PM6/6/14
to publice...@googlegroups.com
Omar,

1) La consulta es a una tabla VFP o a un motor de base de datos.
2) Entiendo que por exportar a excel, te referis a planilla XLS o te referis a Libro de cálculo?

De cualquier forma no hay problema, pregunte y se le responderá...

Saludos,

Pancho
Cordoba
Argentina

Allan Raúl Acuña

unread,
Jun 6, 2014, 4:03:23 PM6/6/14
to publice...@googlegroups.com
Omar,

Si la consulta ya la tienes en un Cursor, puedes usar esto.

Si el archivo de Excel lo quieres mas fino, usa automatizacion.
*-----------------------------------------------------------------------------------

Select crsDatos
lcFileOpen = Putfile( 'Listado de Marcas en Proceso','ListadoProceso','Xls' )
If ! Empty( lcFileOpen )
    Copy To ( lcFileOpen ) Type Xls
    If Messagebox( '¿Desea abrir el Archivo de Excel recién exportado?',32+4, gcSoftwareName) = 6 Then && si
        Declare Integer ShellExecute In shell32.Dll ;
            INTEGER hndWin, ;
            STRING cAction, ;
            STRING cFileName, ;
            STRING cParams, ;
            STRING cDir, ;
            INTEGER nShowWin

        cAction = "open"
        ShellExecute(0,cAction,lcFileOpen,"","",1)
    Endif
Endif

Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 831 8191      
www.NicEasySoft.com
Managua, Nicaragua
Centroamérica



From: fajp...@gmail.com
Date: Fri, 6 Jun 2014 16:59:49 -0300
Subject: Re: [vfp] exportar consulta a excel
To: publice...@googlegroups.com

edgar suarez kummers

unread,
Jun 6, 2014, 5:15:12 PM6/6/14
to publice...@googlegroups.com
Alguien había escrito una forma en el
 
Copy To ( lcFileOpen ) Type Xls
 
Otra ortografía en vez de Xls y que permitía exportar más de una PAGE o sea más de 65535 líneas.
 
Me pareció leer que era algo como FOXPLUS, pero esto lo rechaza el VFP9.0 al compilar.
 
Recuerda alguno cómo era eso de exportar varias PAGE de una vez.
 

francisco prieto

unread,
Jun 6, 2014, 6:12:56 PM6/6/14
to publice...@googlegroups.com

edgar suarez kummers

unread,
Jun 6, 2014, 7:32:14 PM6/6/14
to publice...@googlegroups.com
Estimado Francisco, gracias por el informe.
 

Ing.Omar Gonzalez

unread,
Jun 9, 2014, 2:42:49 PM6/9/14
to publice...@googlegroups.com
asi es francisco la consulta en una tabla de vfp en ella se guarda toda  informacion que se vacia en el formulario pero quiero inculir esa consulta en un segundo formulario para que se pueda visualizar los datos guardados 
y 2) si quiero exportar a excel .xlsx mediante un boton 

espero que me puedad ayudar de antemano gracias por su ayuda

Jairo Miranda

unread,
Jun 9, 2014, 3:20:56 PM6/9/14
to publice...@googlegroups.com

El que se usa desde fox es el copy to  (xls) type Xls pero puedes usar mejor en la exportación  de archivo DBF la automatización Excel . en www.portalfox.com hay un sin número de ejemplos  que puedes descargar.  Y funcionan bien..

 

Copiar desde fox

 

Select proforma

COPY TO pref20.xls FIELDS cod_prod,descrip,descripc2,descripc3,tamano,dh,bod01 FOR pofer=20 AND bod01>12 TYPE xls

 

O mas largo pero funciona major (este de portalfox)

 

********************************************************************

********************************************************************

*!* FUNCTION Exp2Excel( [cCursor, [cFileSave, [cTitulo]]] )

*!*

*!* Exporta un Cursor de Visual FoxPro a Excel, utilizando la

*!* técnica de importación de datos externos en modo texto.

*!*

*!* PARAMETROS OPCIONALES:

*!* - cCursor  Alias del cursor que se va a exportar.

*!*            Si no se informa, utiliza el alias

*!*            en que se encuentra.

*!*

*!* - cFileName  Nombre del archivo que se va a grabar.

*!*              Si no se informa, muestra el libro generado

*!*              una vez concluída la exportación.

*!*

*!* - cTitulo  Titulo del informe. Si se informa, este

*!*            ocuparía la primera file de cada hoja del libro.

********************************************************************

********************************************************************

FUNCTION Exp2Excel( cCursor, cFileSave, cTitulo )

  LOCAL cWarning

  cWarning = "Exportar a EXCEL"

  IF EMPTY(cCursor)

    cCursor = ALIAS()

  ENDIF

  IF TYPE('cCursor') # 'C' OR !USED(cCursor)

    MESSAGEBOX("Parámetros Inválidos",16,cWarning)

    RETURN .F.

  ENDIF

  *********************************

  *** Creación del Objeto Excel ***

  *********************************

  WAIT WINDOW 'Abriendo aplicación Excel.' NOWAIT NOCLEAR

  oExcel = CREATEOBJECT("Excel.Application")

  WAIT CLEAR

 

  IF TYPE('oExcel') # 'O'

    MESSAGEBOX("No se puede procesar el archivo porque no tiene la aplicación" ;

      + CHR(13) + "Microsoft Excel instalada en su computador.",16,cWarning)

    RETURN .F.

  ENDIF

 

  oExcel.workbooks.ADD

 

  LOCAL lnRecno, lnPos, lnPag, lnCuantos, lnRowTit, lnRowPos, i, lnHojas, cDefault

 

  cDefault = ADDBS(SYS(5)  + SYS(2003))

 

  SELECT (cCursor)

  lnRecno = RECNO(cCursor)

  GO TOP

 

  *************************************************

  *** Verifica la cantidad de hojas necesarias  ***

  *** en el libro para la cantidad de datos     ***

  *************************************************

  lnHojas = ROUND(RECCOUNT(cCursor)/65000,0)

  DO WHILE oExcel.Sheets.COUNT < lnHojas

    oExcel.Sheets.ADD

  ENDDO

 

  lnPos = 0

  lnPag = 0

 

  DO WHILE lnPos < RECCOUNT(cCursor)

 

    lnPag = lnPag + 1 && Hoja que se está procesando

 

    WAIT WINDOWS 'Exportando cursor '  + UPPER(cCursor)  + ' a Microsoft Excel...' ;

      + CHR(13) + '(Hoja '  + ALLTRIM(STR(lnPag))  + ' de '  + ALLTRIM(STR(lnHojas)) ;

      + ')' NOCLEAR NOWAIT

 

    IF FILE(cDefault  + cCursor  + ".txt")

      DELETE FILE (cDefault  + cCursor  + ".txt")

    ENDIF

 

    COPY  NEXT 65000 TO (cDefault  + cCursor  + ".txt") DELIMITED WITH CHARACTER ";"

    lnPos = RECNO(cCursor)

 

    oExcel.Sheets(lnPag).SELECT

 

    XLSheet = oExcel.ActiveSheet

    XLSheet.NAME = cCursor + '_' + ALLTRIM(STR(lnPag))

 

    lnCuantos = AFIELDS(aCampos,cCursor)

 

    ********************************************************

    *** Coloca título del informe (si este es informado) ***

    ********************************************************

    IF !EMPTY(cTitulo)

      XLSheet.Cells(1,1).FONT.NAME = "Arial"

      XLSheet.Cells(1,1).FONT.SIZE = 12

      XLSheet.Cells(1,1).FONT.BOLD = .T.

      XLSheet.Cells(1,1).VALUE = cTitulo

      XLSheet.RANGE(XLSheet.Cells(1,1),XLSheet.Cells(1,lnCuantos)).MergeCells = .T.

      XLSheet.RANGE(XLSheet.Cells(1,1),XLSheet.Cells(1,lnCuantos)).Merge

      XLSheet.RANGE(XLSheet.Cells(1,1),XLSheet.Cells(1,lnCuantos)).HorizontalAlignment = 3

      lnRowPos = 3

    ELSE

      lnRowPos = 2

    ENDIF

 

    lnRowTit = lnRowPos - 1

    **********************************

    *** Coloca títulos de Columnas ***

    **********************************

    FOR i = 1 TO lnCuantos

      lcName  = aCampos(i,1)

      lcCampo = ALLTRIM(cCursor) + '.' + aCampos(i,1)

      XLSheet.Cells(lnRowTit,i).VALUE=lcname

      XLSheet.Cells(lnRowTit,i).FONT.bold = .T.

      XLSheet.Cells(lnRowTit,i).Interior.ColorIndex = 15

      XLSheet.Cells(lnRowTit,i).Interior.PATTERN = 1

      XLSheet.RANGE(XLSheet.Cells(lnRowTit,i),XLSheet.Cells(lnRowTit,i)).BorderAround(7)

    NEXT

 

    XLSheet.RANGE(XLSheet.Cells(lnRowTit,1),XLSheet.Cells(lnRowTit,lnCuantos)).HorizontalAlignment = 3

 

    *************************

    *** Cuerpo de la hoja ***

    *************************

    oConnection = XLSheet.QueryTables.ADD("TEXT;"  + cDefault  + cCursor  + ".txt", ;

      XLSheet.RANGE("A"  + ALLTRIM(STR(lnRowPos))))

 

    WITH oConnection

      .NAME = cCursor

      .FieldNames = .T.

      .RowNumbers = .F.

      .FillAdjacentFormulas = .F.

      .PreserveFormatting = .T.

      .RefreshOnFileOpen = .F.

      .RefreshStyle = 1 && xlInsertDeleteCells

      .SavePassword = .F.

      .SaveData = .T.

      .AdjustColumnWidth = .T.

      .RefreshPeriod = 0

      .TextFilePromptOnRefresh = .F.

      .TextFilePlatform = 850

      .TextFileStartRow = 1

      .TextFileParseType = 1 && xlDelimited

      .TextFileTextQualifier = 1 && xlTextQualifierDoubleQuote

      .TextFileConsecutiveDelimiter = .F.

      .TextFileTabDelimiter = .F.

      .TextFileSemicolonDelimiter = .T.

      .TextFileCommaDelimiter = .F.

      .TextFileSpaceDelimiter = .F.

      .TextFileTrailingMinusNumbers = .T.

      .REFRESH

    ENDWITH

 

    XLSheet.RANGE(XLSheet.Cells(lnRowTit,1),XLSheet.Cells(XLSheet.ROWS.COUNT,lnCuantos)).FONT.NAME = "Arial"

    XLSheet.RANGE(XLSheet.Cells(lnRowTit,1),XLSheet.Cells(XLSheet.ROWS.COUNT,lnCuantos)).FONT.SIZE = 8

 

    XLSheet.COLUMNS.AUTOFIT

    XLSheet.Cells(lnRowPos,1).SELECT

    oExcel.ActiveWindow.FreezePanes = .T.

 

    WAIT CLEAR

 

  ENDDO

 

  oExcel.Sheets(1).SELECT

  oExcel.Cells(lnRowPos,1).SELECT

 

  IF !EMPTY(cFileSave)

    oExcel.DisplayAlerts = .F.

    oExcel.ActiveWorkbook.SAVEAS(cFileSave)

    oExcel.QUIT

  ELSE

    oExcel.VISIBLE = .T.

  ENDIF

 

  GO lnRecno

 

  RELEASE oExcel,XLSheet,oConnection

 

  IF FILE(cDefault + cCursor + ".txt")

    DELETE FILE (cDefault + cCursor + ".txt")

  ENDIF

 

  RETURN .T.

 

ENDFUNC

 

***

***

 

JM

Reply all
Reply to author
Forward
0 new messages