Re: tfilexls y texcel
Posted: 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
Posted: 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