by Ramon Paredes » Sun Mar 21, 2010 8:36 pm
Dioni,
La filexls se recomienda por su velocidad de pasar datos de dbf a Xls, cabe mencionar que tiene sus limitaciones en el uso de colores, las font las puedes definir en tipo y tamaño sin problemas y la alineacion de igual forma, aqui les dejo un ejemplo de un programa que lista un maestro de empleados, ojala les sirva :
USE C:\DATA1\RGEN1
PUBLIC oFileXLS,oDlg, oLbx, oFont, oMeter, nMeter,oExcel, oHoja, oBrw
DEFINE FONT oFont NAME "Arial" SIZE 0,-11
PUBLIC lIni := .t., nReg := RecNo(), cActividad := ""
PUBLIC nFormat1, nFormat2,nContar
PUBLIC nFont1, nFont2, nFont3, nFont4
nContar = 0
xOrden = "Orden alfabetico"
lOrden = 6
PUBLIC nRow
oExcel := TOleAuto():New( "Excel.Application" )
oHoja := oExcel:Get( "ActiveSheet" )
DEFINE XLS FORMAT nFormat1 PICTURE '#,##0' // para pesetas
DEFINE XLS FORMAT nFormat2 PICTURE '#,##0.00' // para euros
DEFINE XLS FONT nFont1 NAME "Arial" HEIGHT 14 ITALIC BOLD
DEFINE XLS FONT nFont2 NAME "Arial" UNDERLINE
DEFINE XLS FONT nFont3 NAME "Arial Unicode MS" HEIGHT 9
DEFINE XLS FONT nFont4 NAME "Arial Unicode MS" HEIGHT 8
XLS oFileXLS FILE "MAESTRO1.XLS" //AUTOEXEC
XLS COL 1 WIDTH 7 OF oFileXLS
XLS COL 2 WIDTH 25 OF oFileXLS
XLS COL 3 WIDTH 15 OF oFileXLS
XLS COL 4 WIDTH 12 OF oFileXls
XLS COL 5 WIDTH 12 OF oFileXls
XLS COL 6 WIDTH 15 OF oFileXls
nRow := 2
@ nRow,1 XLS SAY "EMPRESA X DE NICARAGUA " FONT nfont1 OF oFileXLS
nRow++
@ nRow,1 XLS SAY "REPORTE GENERAL DE EMPLEADOS ACTIVOS" FONT nfont2 OF oFileXLS
nRow++
@ nRow,1 XLS SAY "CLASIFICADO POR : "+ALLTRIM(xOrden) FONT nfont2 OF oFileXLS
nRow++
@ nRow,1 XLS SAY "Numero" FONT nfont2 OF oFileXLS
@ nRow,2 XLS SAY "Nombres " FONT nfont2 OF oFileXLS
@ nRow,3 XLS SAY "Apellido1" FONT nfont2 OF oFileXLS
@ nRow,4 XLS SAY "Apellido2" FONT nfont2 OF oFileXLS
@ nRow,5 XLS SAY "Fec_Ing" FONT nfont2 OF oFileXLS
IF LORDEN = 6
@ nRow,6 XLS SAY "Cedula " FONT nfont2 OF oFileXLS
ELSE
@ nRow,6 XLS SAY "Inss" FONT nfont2 OF oFileXLS
endif
nRow += 2
GO TOP
DO WHILE .NOT.EOF()
nRow++
@ nRow,1 xls say TRIM( A->NUMERO ) FONT nFont4 of oFilexls
@ nRow,2 XLS SAY TRIM( A->NOMBRES) FONT nFont4 of oFilexls
@ nRow,3 XLS SAY TRIM( A->APELLI1) FONT nFont4 of oFilexls
@ nRow,4 XLS SAY TRIM( A->APELLI2) FONT nFont4 of oFilexls
@ nRow,5 XLS SAY TRIM( DTOC(A->FEC_ING)) FONT nFont4 of oFilexls
IF LORDEN = 6
@ nRow,6 XLS SAY TRIM( A->RUC) FONT nFont4 of oFilexls
ELSE
@ nRow,6 XLS SAY TRIM( A->INSSBI) FONT nFont4 of oFilexls
ENDIF
// @ nRow,3 XLS SAY A->DIAS FONT nFont4 of oFilexls format nFormat1
nContar = nContar + 1
SKIP
ENDDO
nRow++
nRow++
@ nRow,1 XLS SAY "Empleados " +STR(nContar) FONT nFont3 OF oFileXLS
nRow++
nRow++
XLS PAGE BREAK AT nRow OF oFileXLS
SET XLS TO DISPLAY ;
NOGRIDLINES ;
OF oFileXLS
SET XLS TO PRINTER ;
TOP MARGIN 0.6 ;
BOTTOM MARGIN 0.8 ;
LEFT MARGIN 0 ;
OF oFileXLS
ENDXLS oFileXLS
oExcel:Visible := .T.
oExcel:WorkBooks:Open(cFilePath(GetModuleFileName(GetInstance()))+"MAESTRO1.XLS")
CLOSE RGEN1
RETURN NIL
ahora bien para leer una hoja de calculo y pasar informacion a una dbf lo hago de la siguiente forma :
//====================
FUNCTION PERCAP1()
//====================
Public oExcel, oHoja, nRows, nCols,oMeter,oDlg,nActual:= 0
Public aCampos:={}, nRow, nCol,nContar:= 0
oExcel := TOleAuto():New( "Excel.Application" )
cFile := cGetFile("*.XLS", "Seleccione Fichero")
oExcel:WorkBooks:Open( cFile )
oHoja := oExcel:Get( "ActiveSheet" )
nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
USE PRUEBA2 NEW VIA "DBFCDX"
ZAP
DEFINE DIALOG oDlg RESOURCE 86
REDEFINE METER oMeter Var nContar TOTAL nRows ID 107 OF oDlg UPDATE
REDEFINE BUTTON ID 105 of oDlg ACTION( INICIA( nRows,nCols,nContar ),oDlg:End() )
REDEFINE BUTTON ID 106 of oDlg ACTION( oDlg:End())
ACTIVATE DIALOG oDlg CENTERED
USE
RETURN NIL
//========================================
STATIC FUNCTION INICIA( nRows,nCols,nContar )
//========================================
FOR nRow := 5 TO nRows
nContar = nContar + 1
oMeter:Set( nContar, sysrefresh())
APPEND BLANK
FOR nCol := 1 TO nCols
xValor := oHoja:Cells(nRow,nCol):Value
if Valtype( oHoja:Cells( nRow,nCol ):Value ) = "N"
xValor := STR(xValor)
endif
FieldPut(nCol,xValor)
NEXT
//DBCOMMIT()
Memory(-1)
NEXT
MsgInfo( "Se ha creado el fichero PRUEBA2.DBF" )
CLOSE DATABASES
oExcel:Quit()
oExcel := nil
RETURN
Saludes desde Managua, Nicaragua
Ramon Paredes
... Desde la Tierra de lagos y Volcanes......