pasar datos de tabla/cursor a HTML

720 views
Skip to first unread message

Manuel Zevallos

unread,
Mar 7, 2011, 2:34:22 PM3/7/11
to publice...@googlegroups.com

Hola Amigos...me interesaria saber cómo puedo hacer para pasar los datos de mi tabla/cursor..con solo 13 filas y 12 columnas a una pagina HTML
Hago esto por que me parece mas facil para manejar los titulos del reporte y de las columnas.
Agradeceré sus comentarios-
--
Atentamente,
 
 
Manuel Zevallos B.
RPM #331278

RPC 9-8958-4264 Claro

 
http://manuelzevallos.es.tl


Ing.Daniel Bojorge

unread,
Mar 7, 2011, 2:44:00 PM3/7/11
to publice...@googlegroups.com
Para publicarlo o únicamente para generar un archivo html que luego se puede ver localmente con un explorador?

Si es lo segundo, lo que se me ocurre es que obviamente tenés que tener algún conocimiento básico (bastante básico) de html, para el manejo de tablas (en html).  

Sería que recorrieras la tabla y fueras construyendo en una variable formateando la salida para html, luego un strtofile.





Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)

Manuel Zevallos

unread,
Mar 7, 2011, 3:16:21 PM3/7/11
to publice...@googlegroups.com
Estimado Daniel..el tema es...yo genero los resultados y los envio por correo a otra persona para que los vea, de esta manera evito estar formateando los titutos de un excel que me parece mas complicado.

Hugo C.

unread,
Mar 7, 2011, 3:47:32 PM3/7/11
to Comunidad de Visual Foxpro en Español
Intenta algo como esto ,

LOCAL lcHTML AS String
SELECT miTabla
lcHTML = ""
lcHTML = lcHTML + "<HTML><BODY bgcolor='silver'><TABLE id='Tabla1'
border=1>"
lcHTML = lcHTML + "<TR>"
*:: Titulos (Nombres de campos)
lnCol = FCOUNT()
FOR lnI = 1 TO lnCol
lcHTML = lcHTML + "<TH>" + FIELD(lnI) + "</TH>"
ENDFOR
lcHTML = lcHTML + "</TR>"
*:: Registros
SCAN
lcHTML = lcHTML + "</TR>"
FOR lnI = 1 TO lnCol
lcHTML = lcHTML + "<TD>" + TRANSFORM(EVALUATE(FIELD(lnI))) + "</
TD>"
ENDFOR
ENDSCAN
lcHTML = lcHTML + "</TABLE></BODY></HTML>"
STRTOFILE(lcHTML, "C:\x\x.htm")

Saludos.


On 7 mar, 12:34, Manuel Zevallos <zebem...@gmail.com> wrote:
> Hola Amigos...me interesaria saber cómo puedo hacer para pasar los datos de
> mi tabla/cursor..con solo 13 filas y 12 columnas a una pagina HTML
> Hago esto por que me parece mas facil para manejar los titulos del reporte y
> de las columnas.
> Agradeceré sus comentarios-
> --
>   Atentamente,
>
> *Manuel Zevallos B.*
> *RPM #331278
> *
>
> *RPC 9-8958-4264 Claro*
>
> http://manuelzevallos.es.tl

Manuel Zevallos

unread,
Mar 7, 2011, 3:50:04 PM3/7/11
to publice...@googlegroups.com
Hola Hugo..y esto que hace?

Ing.Daniel Bojorge

unread,
Mar 7, 2011, 3:59:58 PM3/7/11
to publice...@googlegroups.com
Es a lo que me refería...




Dios L@s Bendiga

Saludos,

Daniel (Con 1 Estrella DCE de Microsoft)
Nicaragua

"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)



Luis Maria Guayan

unread,
Mar 7, 2011, 4:45:38 PM3/7/11
to publice...@googlegroups.com
En el siguiente artículo de PortalFox te muestra un par de opciones para hacer lo que quieres

-- Convertir tablas a formato HTML --
http://www.portalfox.com/article.php?sid=1966

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Hugo C.

unread,
Mar 7, 2011, 4:45:51 PM3/7/11
to Comunidad de Visual Foxpro en Español
Crea un archivo html con los datos de alguna tabla.

Saludis.

On 7 mar, 13:50, Manuel Zevallos <zebem...@gmail.com> wrote:
> Hola Hugo..y esto que hace?
>
> http://manuelzevallos.es.tl- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Irlandes 1960

unread,
Mar 8, 2011, 8:20:16 AM3/8/11
to publice...@googlegroups.com
Hola, si queres mandar los resultados de lo que habitualmente es un informe, ¿probaste de generar con el informe un archivo TIF y adjuntarlo? es una solucion sencilla y elegante, y te permite utilizar cualquiera de los reportes que ya tenes andando. Si te interesa te adjunto la version de mptifflistener sacada de la ayuda de vfp9 que con algunas minimas adaptaciones estoy usando.
Suerte y larga vida al Zorro

mptifflistener.prg

IVAN MARTINEZ

unread,
Mar 8, 2011, 2:53:19 PM3/8/11
to publice...@googlegroups.com
De esto hay bastante escrito en el foro (buscar mensajes viejos), portalfox y en la ayuda de vfp.
Incluso hay un wizard de vfp para generar paginas  html.
 
Ivan Martinez von Halle


De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Manuel Zevallos
Enviado el: Lunes, 07 de Marzo de 2011 03:04 p.m.
Para: publice...@googlegroups.com
Asunto: [vfp] pasar datos de tabla/cursor a HTML

Jose Antonio Blasco

unread,
Mar 9, 2011, 10:48:26 AM3/9/11
to publice...@googlegroups.com
Te paso una función que hace lo que quieres.
La tabla o cursor a convertir tiene que estar seleccionada.
Le debes pasar el nombre y ruta del archivo "html" que se generará.
Puedes pasarle, opcionalmente, un segundo parámetro, con el titulo para el listado.


***********************************************************
Function dbftohtml
Lparameters tcFilename,tcTitulo
*****************************************************
* Toma la tabla en uso en este momento y pone su
* contenido en formato html en le archivo 'tcFilename'
*   Si se paso 'tcTitulo', este será el encabezado del listado
*****************************************************
#Define MAX_TABLE 40
*
cColorTitle='#000080'
cColorBody='#FFFFFF'
cColorColum='#DDDFF'
cColorTable='#FFFFEE'
*****************************************************
* Maximo de items en una pagina html
* usado para especificar cuantas lineas son por pagina
* El resultado seran n paginas de MAX_TABLE lineas
*****************************************************
cNomFont=['Times New Roman']
cLinFont=[<FONT SIZE=-1>]
*****************************************************
* cNomFont -> nombre fuente utilizada
* cLinFont -> fuente para lineas detalle
*****************************************************

* Tomar el nombre de la tabla en uso
lcTable=Alias()
If Empty(lcTable)
Messagebox([No existe ninguna tabla abierta en este momento!],64,[Message])
Return
Endif

If Vartype(tcTitulo)='L'
If tcTitulo=.F.
tcTitulo=lcTable
Endif
Else
If Empty(Alltrim(tcTitulo))
tcTitulo=lcTable
Endif
Endif
tcTitulo=Proper(tcTitulo)

* Obtiene los nombres de los campos
nbFields=Afields(laFields)

* Cuenta el numero de campos 'general'
nbGenFields=0
For i = 1 To nbFields
If laFields[i,2]='G'
nbGenFields=nbGenFields+1
Endif
Endfor

* Chequeo el nombre del archivo y la creación de este
If Empty(tcFilename)
Messagebox([No se pudo crear el archivo, el parametro 'tcfilename' esta vacio!],64,[Message])
Return
Endif
fHandle=Fcreate(tcFilename)
If fHandle < 1
Messagebox([Un error a ocurrido, no se pudo crear el archivo!],64,[Message])
Return
Endif

** Fputs the html header to the file
** you can customize this header to fit your need  ********************
Fputs(fHandle,[<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">])
Fputs(fHandle,[<HTML>])
Fputs(fHandle,[<HEAD>])
Fputs(fHandle,'')
Fputs(fHandle,[<TITLE>]+tcTitulo+[</TITLE>])
Fputs(fHandle,'')
Fputs(fHandle,[<META NAME="author" content="">])
Fputs(fHandle,[<META name="generator" content="VFP Table Export">])
Fputs(fHandle,[<META name="keywords" content="">])
Fputs(fHandle,[<META name="description" content="">])
Fputs(fHandle,'')
Fputs(fHandle,[<STYLE>])
Fputs(fHandle,[ H1.SaltoDePagina])
Fputs(fHandle,[  {PAGE-BREAK-AFTER: always}])
Fputs(fHandle,[</STYLE>])
Fputs(fHandle,[</HEAD>])
Fputs(fHandle,'')
Fputs(fHandle,[<BODY BGCOLOR=]+cColorBody+[>])
Fputs(fHandle,[<BASEFONT COLOR=BLACK FACE=]+cNomFont+[ SIZE=1>])
Fputs(fHandle,'')
Fputs(fHandle,'')
***********************************************************************

*** construir la hoja

Select &lcTable
Locate
iii=0

Scan
iii=iii+1
If iii%MAX_TABLE=1
*** Cuando el contador de lineas llega igual a MAX_TABLE
*** se cierra la pagina actual y crea una nueva
If iii > 1
Fputs(fHandle,[</TABLE>])
Fputs(fHandle,'')
Fputs(fHandle,'')
Fputs(fHandle,'')
Fputs(fHandle,[<H1 class=SaltoDePagina> </H1>])
*
Fputs(fHandle,[<FONT SIZE=+4 COLOR=]+cColorTitle+[ ><i>]+tcTitulo+[</i></FONT>])
Fputs(fHandle,[<TABLE BORDER='1'  WIDTH=100% CELLPADDING='2' CELLSPACING='0' BGCOLOR="#FFFFFF">])
Else
** Primera hoja
Fputs(fHandle,[<FONT SIZE=+4 COLOR=]+cColorTitle+[ ><i>]+tcTitulo+[</i></FONT>])
Fputs(fHandle,[<TABLE BORDER='1'  WIDTH=100% CELLPADDING='2' CELLSPACING='0' BGCOLOR="#FFFFFF">])
Endif
*
Fputs(fHandle,[ <TR>])
For ii = 1 To nbFields
Do Case
Case laFields[ii,2]='G'
**Forget it!
Otherwise
**Any type...
Fputs(fHandle,[ <TD BGCOLOR=]+cColorColum+[ ><center><B>&nbsp;]+laFields[ii,1]+[</B></center></TD>])
Endcase
Endfor
** cierra la linea
Fputs(fHandle,[ </TR>])
Endif

** inicia la linea
Fputs(fHandle,[ <TR>])

** busca a traves de los archivos ...
For i = 1 To nbFields
Do Case
Case Isnull(&laFields[i,1])
**Trap the .NULL.
Fputs(fHandle,[ <TD BGCOLOR=]+cColorTable+[ >]+cLinFont+[.NULL.</FONT></TD>])

Case laFields[i,2]='G'
**forget it!

Case laFields[i,2]='L'
**transform logical field to text
If &laFields[i,1]
Fputs(fHandle,[ <TD BGCOLOR=]+cColorTable+[ >]+cLinFont+[True</FONT></TD>])
Else
Fputs(fHandle,[ <TD BGCOLOR=]+cColorTable+[ >]+cLinFont+[False</FONT></TD>])
Endif

Case laFields[i,2]='N'
lclong=laFields[i,3]
lcdeci=laFields[i,4]
If Len(laFields[i,1])>lclong
lclong=Len(laFields[i,1])
Endif
lclong2=Alltrim(Str(lclong*(Fontmetric(6,cNomFont,10,'B')+1)))
lctext=Rtrim(Padl(&laFields[i,1],lclong))
*
Fputs(fHandle,[ <TD BGCOLOR=]+cColorTable+[ WIDTH=]+lclong2+[ ALIGN=RIGHT>]+cLinFont+lctext+[</FONT></TD>])

Otherwise
** PADR() is in charge to transform anything to char!
lctext=Alltrim(Padr(&laFields[i,1],2400))

** convert the string...
lctext=ConvertToHTML(lctext)

** Add the non breaking space to be sure that the column
** display was large enough to show correctly and
** avoid
** this
** kind of
** display
** in the
** columns
If Len(lctext)=0
lctext=Space(24)
Endif
If Len(lctext)<25
lctext=Strtran(lctext,' ','&nbsp;')
Else
lctext=Strtran(Substr(lctext,1,24),' ','&nbsp;')+Substr(lctext,25)
Endif
** put to file
Fputs(fHandle,[ <TD BGCOLOR=]+cColorTable+[ >]+cLinFont+lctext+[</FONT></TD>])
Endcase
Endfor
**close the row
Fputs(fHandle,[ </TR>])
Endscan
**close the last table
Fputs(fHandle,[</TABLE>])

** FPuts the 'footer' of the html file *******************
Fputs(fHandle,[</BODY>])
Fputs(fHandle,[</HTML>])
**

** Close the file
Fclose(fHandle)

Return

*********
* Convert some special char to HTML
**************
Function ConvertToHTML
Lparameters tcString

tcString=Strtran(tcString,'&','&amp;')
tcString=Strtran(tcString,'à','&agrave;')
tcString=Strtran(tcString,'â','&acirc;')
tcString=Strtran(tcString,'ç','&ccedil;')
tcString=Strtran(tcString,'é','&eacute;')
tcString=Strtran(tcString,'è','&egrave;')
tcString=Strtran(tcString,'ë','&euml;')
tcString=Strtran(tcString,'ê','&ecirc;')
tcString=Strtran(tcString,'ï','&iuml;')
tcString=Strtran(tcString,'ö','&ouml;')
tcString=Strtran(tcString,'ô','&ocirc;')
tcString=Strtran(tcString,'ù','&ugrave;')
tcString=Strtran(tcString,'û','&ucirc;')
tcString=Strtran(tcString,'À','&Agrave;')
tcString=Strtran(tcString,'Â','&Acirc;')
tcString=Strtran(tcString,'Ç','&Ccedil;')
tcString=Strtran(tcString,'É','&Eacute;')
tcString=Strtran(tcString,'È','&Egrave;')
tcString=Strtran(tcString,'Ë','&Euml;')
tcString=Strtran(tcString,'Ê','&Ecirc;')
tcString=Strtran(tcString,'Ï','&Iuml;')
tcString=Strtran(tcString,'Ö','&Ouml;')
tcString=Strtran(tcString,'Ô','&Ocirc;')
tcString=Strtran(tcString,'Ù','&Ugrave;')
tcString=Strtran(tcString,'Û','&Ucirc;')
tcString=Strtran(tcString,'<','&lt;')
tcString=Strtran(tcString,'>','&gt;')
tcString=Strtran(tcString,'"','&quot;')
tcString=Strtran(tcString,'®','&reg;') &&Registered TradeMark
tcString=Strtran(tcString,'©','&copy;') &&Copyright
tcString=Strtran(tcString,Chr(13)+Chr(10),'<P>')
tcString=Strtran(tcString,Chr(10),'<BR>')

Return tcString
************************************************************

Un saludo.


--
Jose A. Blasco
Zaragoza - España


Manuel Zevallos

unread,
Mar 9, 2011, 12:49:08 PM3/9/11
to publice...@googlegroups.com
LO QUE QUIERO HACER ES ALGO ASI..PERO EN EXCEL..SI SE PUDIERA SINO EN HTML
AMPM3.jpg

IVAN MARTINEZ

unread,
Mar 9, 2011, 4:06:29 PM3/9/11
to publice...@googlegroups.com
 
Ese reporte se puede hacer perfectamente con vfp.
 
Y despues lo pùedes exportar a excel con foxypreviewr u otra herramienta.
 
Ivan Martinez von Halle


De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Manuel Zevallos
Enviado el: Miércoles, 09 de Marzo de 2011 01:19 p.m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] Re: pasar datos de tabla/cursor a HTML

Jose Antonio Blasco

unread,
Mar 10, 2011, 3:42:01 AM3/10/11
to publice...@googlegroups.com
Manuel, te paso la función que yo utilizo para pasar a excel.
Contempla la posibilidad de que se supere el límite de 65536 líneas, añadiendo páginas a la hoja de excel.

*****************************************************
Function go_excel(lcursor As String,lnombre As String,lformato As Boolean,labrir As Boolean)
***********************************************************************
*!*   Parametros:
*!*      lcursor (caracter): Nombre del Cursor/Tabla para llevar a excel
*!*      lnombre (caracter): Nombre del fichero de excel a generar
*!*      lformato (lógico):  Titulos y pagina con formato o no
*!*      labrir (lógico):    Abrir Excel al terminar o no
***********************************************************************
*!* Ejemplo de Uso: =go_excel('mitabla','c:\pruebas\texto.xls',.t.,.f.)
***********************************************************************

If Type('lcursor')#'C' Or !Used(lcursor)
=Messagebox("Parametros Invalidos",16,'De VFP a Excel')
Return .F.
Endif
If Type('lnombre')#'C'
lnombre=''
Endif
If Type('lformato')#'L'
lformato=.F.
Endif
If Type('labrir')#'L'
labrir=.F.
Endif

oExcel = Createobject("Excel.application")

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,'De VFP a Excel')
Return .F.
Endif

Wait Window Nowait "Por favor espere, enviando datos a Excel..."

Select (lcursor)
lnTotal = Reccount()
lcuantos=Afields(lcampos,lcursor)

With oExcel
.Visible = .F.
oMasterWorkBook = .workbooks.Add && Add a new workbook
lnMaxRows = .ActiveWorkBook.ActiveSheet.Rows.Count && Get max row count
lnNeededSheets = Ceiling( lnTotal / (lnMaxRows - 1) ) && 1 row header
lnCurrentSheetCount = .sheets.Count
If lnNeededSheets > lnCurrentSheetCount
.sheets.Add(,.sheets(lnCurrentSheetCount),;
lnNeededSheets - lnCurrentSheetCount) && Add new sheets after old ones
Endif
Endwith

With oMasterWorkBook
For ix = 1 To lnNeededSheets
.sheets.Item(ix).Name = "Pagina "+Padl(ix,3,"0")
Endfor
lcExportName = Sys(5)+Curdir()+Sys(2015)+".dbf"
*
For ix = 1 To lnNeededSheets
lnStart = ( ix - 1 ) * (lnMaxRows-1) + 1
*
Copy To (lcExportName) ;
for Between(Recno(),lnStart,lnStart+lnMaxRows-2) Type Fox2x As 850
*
oSourceWorkBook = oExcel.workbooks.Open(lcExportName)
.WorkSheets(ix).Activate
oSourceWorkBook.WorkSheets(1).UsedRange.Copy(.WorkSheets(ix).Range('A1'))
oSourceWorkBook.Close(.F.) && Close w/o save
Erase (lcExportName)
*
If lformato=.T.
.WorkSheets(ix).Columns.AutoFit
For i = 1 To lcuantos
.WorkSheets(ix).Cells(1,i).Font.Name = "Arial"
.WorkSheets(ix).Cells(1,i).Font.Size = 10
.WorkSheets(ix).Cells(1,i).Font.bold = .T.
Next
.WorkSheets(ix).Columns.AutoFit
*
lcTotalPrintArea = ["$A$1:$] + ColumnLetter(lcuantos) + [$]+Alltrim(Str(lnMaxRows)) + ["]

With .WorkSheets(ix).PageSetup
.CenterHorizontally = .T.
.CenterVertically = .F.
.Zoom = .F.
.PrintArea = &lcTotalPrintArea.
.FitToPagesWide = 1
.FitToPagesTall = 999
Endwith
Endif
*
Endfor
*
.WorkSheets(1).Activate
*
Endwith

Wait Clear

laviso=.F.
If Empty(lnombre)
lnombre = Sys(5)+Curdir()+Sys(2015)+".xls"
laviso=.T.
Endif

If labrir=.F.
*
If Val(oExcel.Version) > 11
oExcel.ActiveWorkBook.SaveAs(lnombre,56)
Else
oExcel.ActiveWorkBook.SaveAs(lnombre)
Endif
*
oExcel.ActiveWorkBook.Close
oExcel.Quit
Release oExcel
*
If laviso
Mensaje="Se ha grabado el archivo "+lnombre+Space(15)
TipoDialogo = 0 + 64 + 0
titulo = m.aplica
respon = Messagebox(Mensaje, TipoDialogo, titulo)
Endif
*
Else
If laviso=.F.
*
If Val(oExcel.Version) > 11
oExcel.ActiveWorkBook.SaveAs(lnombre,56)
Else
oExcel.ActiveWorkBook.SaveAs(lnombre)
Endif
*
Endif
oExcel.Visible = .T.
Endif

Return .T.
Endfunc

Procedure ColumnLetter
Parameter lnColumnNumber

lnFirstValue = Int(lnColumnNumber/27)
lcFirstLetter = Iif(lnFirstValue=0,"",Chr(64+lnFirstValue))
lcSecondLetter = Chr(64+Mod(lnColumnNumber,26))

Return lcFirstLetter + lcSecondLetter
Endproc
*****************************************************

Un saludo

Reply all
Reply to author
Forward
0 new messages