Page 1 of 1

tfilexls y texcel - SOLUCIONADO

PostPosted: Wed Sep 07, 2011 9:21 pm
by Armando Picon
Por vez primera debo exportar datos de un Browse (NO XBROWSE) a Excel. De acuerdo a los post antiguos aparentemente las librerias tFileXLS o tEXCEL son las adecuadas para exportar datos de DBF a XLS. Agradecería mucho me indicaran donde ubicar estas librerias y, si es posible un ejemplo de codigo.

Gracias por adelantado

Armando

Re: tfilexls y texcel

PostPosted: Wed Sep 07, 2011 10:43 pm
by ruben Dario
Saludos Le envio la clase FileXls

[url]
http://www.4shared.com/file/TDxywmf6/xlslib.html
[/url]

Re: tfilexls y texcel

PostPosted: Wed Sep 07, 2011 11:21 pm
by Armando Picon
Ruben Darío

Gracias por la librería. Voy a generarlo para la versión de FWH que poseo. Mil gracias. Pregunta: ¿Tienes algún codigo donde lo hayas aplicado?... para compartirlo en este foro?

Re: tfilexls y texcel

PostPosted: Thu Sep 08, 2011 12:07 am
by Enrrique Vertiz
Armando, aqui hay un post anterior donde hay ejemplos de FileXls y tExcelScript :

viewtopic.php?f=6&t=18360&p=96313&hilit=creacion+excel#p96313

Re: tfilexls y texcel

PostPosted: Thu Sep 08, 2011 2:20 am
by Armando Picon
Enrique

¿TOleAuto pertenece a una clase de FWH o a una independiente? En las rutinas se especifica este objeto y entonces me salta la duda.

Armando

Re: tfilexls y texcel

PostPosted: Thu Sep 08, 2011 2:42 am
by Enrrique Vertiz
Amando hasta donde recuerdo TOle viene con (x)Harbour
El FileXls si es externo y hay que incluir los .PRG que lo componen en tu proyecto.

Re: tfilexls y texcel

PostPosted: Thu Sep 08, 2011 4:13 am
by Armando Picon
Ok Enrique
Voy a probar los ejemplos adaptados a lo que intento hacer.
armando

Re: tfilexls y texcel

PostPosted: Thu Sep 08, 2011 1:46 pm
by ruben Dario
Te Envio Ejemplo, No te olvides de Incluir al inicio de tu preg el #include "FileXLS.ch"

Code: Select all  Expand view


  Filexls := "test2.xls"
  DEFINE XLS FONT nFont1 NAME "Arial" HEIGHT 12 BOLD
  DEFINE XLS FONT nFont2 NAME "Arial"
  DEFINE XLS FORMAT nFormat1 PICTURE 'dd-mmm-yyyy'
  DEFINE XLS FORMAT nFormat2 PICTURE '#,##0'
  if memvar->x_xlsaut=1
    XLS oFileXLS FILE  &Filexls //AUTOEXEC //PROTECT  AUTOEXEC  NO AUTOEXEC  hace que se habra en automatico , no automatico
  else
    XLS oFileXLS FILE  &Filexls //AUTOEXEC // no se habre automaticamente
  endif

 XLS COL 1  WIDTH 15 OF oFileXLS
 XLS COL 2  WIDTH 15 OF oFileXLS


 @ 1,1  XLS SAY "Codigo"  FONT nfont2 OF oFileXLS //BORDER BORDER_UP   ALIGNAMENT ALING_CENTER ALIGNAMENT ALING_LEFT
 @ 1,2  XLS SAY "Nombre"  FONT nfont2 OF oFileXLS //BORDER BORDER_DOWN ALIGNAMENT ALING_CENTER
 nXlsLine:=3
 Do While .Not. if(aContl[20],oDbfxls:EOF(),EOF())
      @ nXlsLine,1  XLS SAY oDbfxls:Fields("tipmod"):Value OF oFileXLS
      @ nXlsLine,2  XLS SAY oDbfxls:Fields("nombre"):Value OF oFileXLS  
      oDbfxls:MoveNext()
      lin++
       //    oMeter:Set( lin ) //        oProg:nPosition += 1
      ::loMeter:Set( oDbfxls:AbsolutePosition )  //   oMeter:Set( oDbfxls:AbsolutePosition )
   nXlsLine++

 
EndDo

 SET XLS TO DISPLAY ;
 OF oFileXLS
 ENDXLS oFileXLS

 

Re: tfilexls y texcel

PostPosted: Fri Sep 16, 2011 12:44 am
by Armando Picon
:Gracias Dario y Enrique

Pude enviar los datos de una tabla directamente a Excel sin mucha complicacion gracias a TExcelScript. los "defectillos" son que los datos aparecen en la Hoja Electrónica de forma lenta. No he podido comprobar si se requiere tener instalado el MS-excel, pero como digo, son solamente cosas que no creo molesten mucho al cliente.

Esta es la rutina que escribi para este tema:

#include "fivewin.ch"

* Usando TEXCELSCRIPT
FUNCTION Cierre2XLS(dFecha)
Local cAlias := SELECT()
LOCAL xlsFile := oApp:Pathwork + "\" + DTOS(dFecha)+".XLS" //donde voy a grabar el archivo excel
Local oExcel
Local nRow, nCol, N := 1
Local aHeads := {}
*
Local nIMPORTE := 0 // VALOR FACTURA
Local nPENDIENTE := 0 // PENDIENTE INICIA
Local nACUENTA := 0 // PAGOS A CUENTA
Local nSALDO := 0 // SALDOS
*
oExcel := TExcelScript():New()
oExcel:create(xlsFile)
oExcel:visualizar(.T.)
*
* Cabeceras de columna
AADD( aHeads, "TIENDA") // NUMERO DE TIENDA
AADD( aHeads, "OT No.") // NUMERO DE TRANSACCION - NUMERO OT
AADD( aHeads, "CLIENTE") // ID DE CLIENTE
AADD( aHeads, "SERVICIO") // TIPO DE SERV.
AADD( aHeads, "IMPORTE") // VALOR FACTURA )
AADD( aHeads, "PENDIENTE") // PENDIENTE INICIAL
AADD( aHeads, "A CUENTA") // PAGOS A CUENTA
AADD( aHeads, "SALDO") // SALDOS
AADD( aHeads, "H.RECEP") // HORA DE RECEPCION
AADD( aHeads, "F.ENTR.") // FECHA DE ENTREGA
AADD( aHeads, "H.ENTR.") // HORA DE ENTREGA
AADD( aHeads, "ENTR. EN") // ID DE ENTREGA=01->TIENDA / 02->DOMICILIO
*
oExcel:Say( 1, 1, "CIERRE DE OPERACIONES - "+DTOS(dFecha),"Tahoma", 25, .T.,,,,,)
nRow := 2
for n=1 to LEN(aHeads)
oExcel:Say( nRow, N, aHeads[N],,,.T.,,,7,,)
next N
*
oExcel:borders("A2:L2",nRow,N,1)
nRow++
DO WHILE ! EOF()
*
oExcel:Say( nRow, 1 , (cAlias)->NUMTIEND,,,,,,7,,)
oExcel:Say( nRow, 2 , IIF( VALTYPE( (cAlias)->NUMTRANS)<>"C", ;
TRANSFORM( (cAlias)->NUMTRANS, "999999"),(cAlias)->NUMTRANS),,,,,,7,,)
oExcel:Say( nRow, 3 , (cAlias)->ID_CLIEN,,,,,,7,,)
oExcel:Say( nRow, 4 , (cAlias)->ID_SERVI,,,,,,7,,)
oExcel:Say( nRow, 5 , (cAlias)->VALFACTU,,,,,,7,,)
oExcel:Say( nRow, 6 , (cAlias)->COB_PEND,,,,,,7,,)
oExcel:Say( nRow, 7 , (cAlias)->COB_CNTA,,,,,,7,,)
oExcel:Say( nRow, 8 , (cAlias)->COB_SALD,,,,,,7,,)
oExcel:Say( nRow, 9 , (cAlias)->HR_RECEP,,,,,,7,,)
oExcel:Say( nRow, 10, (cAlias)->FECENTRE,,,,,,7,,)
oExcel:Say( nRow, 11, (cAlias)->HR_ENTRE,,,,,,7,,)
oExcel:Say( nRow, 12, (cAlias)->ID_ENTRE,,,,,,7,,)
*
nIMPORTE += (cAlias)->VALFACTU // VALOR FACTURA
nPENDIENTE += (cAlias)->COB_PEND // PENDIENTE
nACUENTA += (cAlias)->COB_CNTA // PAGOS A CUENTA
nSALDO += (cAlias)->COB_SALD // SALDOS
*
SKIP
nRow++

ENDDO
*
oExcel:Say( nRow, 1 , "TOTALES",,12,.T.,,,7,,)
oExcel:Say( nRow, 5 , nIMPORTE,,,,,,7,,)
oExcel:Say( nRow, 6 , nPENDIENTE,,,,,,7,,)
oExcel:Say( nRow, 7 , nACUENTA,,,,,,7,,)
oExcel:Say( nRow, 8 , nSALDO,,,,,,7,,)
*
oExcel:Save()
*
RETURN

Re: tfilexls y texcel - SOLUCIONADO

PostPosted: Fri Sep 16, 2011 1:06 pm
by MarioG
Armando;
Uno de los motivos por loque deje TExcelScript fue porque no le encontré la vuelta para que no sea lenta la composición de la hoja.
TFileXLS, es bastante mas sencilla de usar, y con posibilidades de campos calculados. si las pretenciones no son muy profundas, para hojas sencillas la salida es practicamente inmediata.
Esta es la última version que tengo: (con ejemplos)
http://www.box.net/shared/vkc2nu2yj70bit697ll8


Saludos

Re: tfilexls y texcel - SOLUCIONADO

PostPosted: Fri Sep 16, 2011 4:00 pm
by Armando Picon
Mario

Gracias por el aporte. Voy a probar el código que me alcanzas. Pregunta ¿requiere que se enlace el aporte de la clase OLE de Avendaño o no es necesario? (en algún escrito, que leí, indicaba que hacia uso de algo relacionado con OLE de Ramón Avendaño).

De acuerdo a los ejemplos que me envías, parece bien sencillo de aplicar. Voy a hacer las pruebas para ver si le alcanzo al cliente, una nueva versión de su aplicación, con esta clase adentro.

Mil gracias. Te comentaré lo que sucede.

Un abrazo

Armando

Re: tfilexls y texcel - SOLUCIONADO

PostPosted: Fri Sep 16, 2011 8:21 pm
by MarioG
Armando;
No es necesario usar la clase OLE, al menos si compilas con xHarbour.
Si mal no recuerdo en algún momento lei que era necesario si compilabas con Harbour
Asi es que, quizas, si alguien usa ambos compiladores podrá sacarnos la duda

Saludos

Re: tfilexls y texcel - SOLUCIONADO

PostPosted: Sun Sep 18, 2011 3:37 pm
by Armando Picon
Mario

¡Pues sí! La clase TfileXLS también es simple de aplicar. Su principal carencia, muchas veces no necesaria (hasta que se encuentre con un cliente "colorido"), es el hecho que no tiene posibilidades de colorear las fuentes o el fondo de las celdas, con la excepción de darle atributos de "sombra". Te agradezco mucho que me hayas proporcionado la clase.

Este es el codigo que he generado con tfileXLS

**************************************************************************
* Exportar datos de la BD hacia una hoja Electronica de Excel *
* A. Picón S., Lima, Perú *
* 18.09.2011 *
* Uso de la Clase tfileXLS *
* Gracias a la Colaboración de Mario G., Foro Fivetechsoft *
***************************************************************************
#include "FileXLS.ch"

FUNCTION ExpCierreXLS(dFecha)
Local cAlias := SELECT()
LOCAL xlsFile := ""
Local aHeads := {}
Local nIMPORTE := 0 // VALOR FACTURA
Local nPENDIENTE := 0 // PENDIENTE
Local nACUENTA := 0 // PAGOS A CUENTA
Local nSALDO := 0 // SALDOS
* variables de la clase FileXLS
Local oFileXLS
local nFormat1
local nFont1, nFont2, nFont3, nFont4
* Variables para filas y columnas
Local nRow, nCol, N := 1
*
* Formato para numeros
DEFINE XLS FORMAT nFormat1 PICTURE '#,##0.00' // para importes
* Fuentes y tamaños
DEFINE XLS FONT nFont1 NAME "Arial" HEIGHT 16 BOLD // titulo general
DEFINE XLS FONT nFont2 NAME "Arial" HEIGHT 12 BOLD // titulo de campos
DEFINE XLS FONT nFont3 NAME "Arial" HEIGHT 10 // Valores del contenido
* Titulo general
cTitulo := "CIERRE DE OPERACIONES - "+DTOS(dFecha)
* Cabeceras de columna
AADD( aHeads, "TIENDA") // NUMERO DE TIENDA
AADD( aHeads, "OT No.") // NUMERO DE TRANSACCION - NUMERO OT
AADD( aHeads, "CLIENTE") // ID DE CLIENTE
AADD( aHeads, "SERVICIO") // TIPO DE SERV.
AADD( aHeads, "IMPORTE") // VALOR FACTURA
AADD( aHeads, "PENDIENTE") //PENDIENTE INICIAL
AADD( aHeads, "A CUENTA") //PAGOS A CUENTA
AADD( aHeads, "SALDO") //SALDOS
AADD( aHeads, "H.RECEP") //HORA DE RECEPCION
AADD( aHeads, "F.ENTR.") //FECHA DE ENTREGA
AADD( aHeads, "H.ENTR.") //HORA DE ENTREGA
AADD( aHeads, "ENTR. EN") // ID DE ENTREGA=01->TIENDA / 02->DOMICILIO
*
* Nombre del archivo Excel a generarse
xlsFile := oApp:Pathwork + "\" + (cAlias)->NUMTIEND + DTOS(dFecha)+".XLS"
XLS oFileXLS FILE (xlsFile) AUTOEXEC
* Anchos de las columnas
XLS COL 1 WIDTH 1 OF oFileXLS // primera columna en blanco como margen
FOR N=1 TO LEN(aHeads)
XLS COL (N+1) WIDTH ((LEN(aHeads[N]) * 1.8 ) + 2 ) OF oFileXLS // 1.8 por el ancho de la fuente
// a utlizar (Font2)
NEXT
* Titulos
nRow := 2
@ nRow, 2 XLS SAY (cTitulo) FONT nfont1 OF oFileXLS
nRow += 2
N := 1
FOR N=1 TO LEN(aHeads)
@ nRow, (N+1) XLS SAY (aHeads[N]) FONT nfont2 ;
BORDER 120 ;
SHADED ;
ALIGNAMENT 2 ;
OF oFileXLS
NEXT N
nRow++
DO WHILE !EOF()
*
@ nRow, 2 XLS SAY (cAlias)->NUMTIEND FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 3 XLS SAY (cAlias)->NUMTRANS FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 4 XLS SAY (cAlias)->ID_CLIEN FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 5 XLS SAY (cAlias)->ID_SERVI FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 6 XLS SAY (cAlias)->VALFACTU FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 7 XLS SAY (cAlias)->COB_PEND FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 8 XLS SAY (cAlias)->COB_CNTA FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 9 XLS SAY (cAlias)->COB_SALD FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 10 XLS SAY (cAlias)->HR_RECEP FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 11 XLS SAY (cAlias)->FECENTRE FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 12 XLS SAY (cAlias)->HR_ENTRE FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
@ nRow, 13 XLS SAY (cAlias)->ID_ENTRE FONT nfont3 ;
ALIGNAMENT 2 ;
OF oFileXLS
*
nIMPORTE += (cAlias)->VALFACTU // TOTAL IMPORTES FACTURA
nPENDIENTE += (cAlias)->COB_PEND // TOTAL PENDIENTES X POR COBRAR
nACUENTA += (cAlias)->COB_CNTA // TOTAL PAGOS A CUENTA RECIBIDOS
nSALDO += (cAlias)->COB_SALD // SALDOS X COBRAR
*
SKIP
nRow++
N := 2
ENDDO
@ nRow, 2 XLS SAY "TOTALES" FONT nfont2 ;
ALIGNAMENT 2 ;
SHADED ;
OF oFileXLS
* Say en blanco, solo para poder "sombrear" la columna
@ nRow, 3 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
@ nRow, 4 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
@ nRow, 5 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
*
@ nRow, 6 XLS SAY (nIMPORTE) FONT nfont2 ;
ALIGNAMENT 2 ;
SHADED ;
OF oFileXLS
@ nRow, 7 XLS SAY (nPENDIENTE) FONT nfont2 ;
ALIGNAMENT 2 ;
SHADED ;
OF oFileXLS
@ nRow, 8 XLS SAY (nACUENTA) FONT nfont2 ;
ALIGNAMENT 2 ;
SHADED ;
OF oFileXLS
@ nRow, 9 XLS SAY (nSALDO) FONT nfont2 ;
ALIGNAMENT 2 ;
SHADED ;
OF oFileXLS
* Say en blanco, solo para poder "sombrear" la columna
@ nRow, 10 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
@ nRow, 11 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
@ nRow, 12 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
@ nRow, 13 XLS SAY "" FONT nfont2 ;
SHADED ;
OF oFileXLS
*
XLS PAGE BREAK AT nRow OF oFileXLS
*
SET XLS TO DISPLAY ;
NOGRIDLINES ;
OF oFileXLS
*
ENDXLS oFileXLS


RETURN NIL

Re: tfilexls y texcel - SOLUCIONADO

PostPosted: Mon Sep 19, 2011 12:31 pm
by MarioG
Me alegra que te sea util
Como siempre, lo que se puede con uno, no lo tiene el otro y visceversa :D