Page 1 of 1

Velocidad al pasar datos a XLS

Posted: Thu Mar 18, 2010 2:12 am
by JoseGS
Hola amigos del foro, estoy utilizando TExcelScript para enviar registros de una DBF a XLS. Todo funciona muy bien pero el problema es la velocidad. Tarda demasiados minutos (unos 10) en pasar tan solo unos 180 registros... Esto es asi aun cuando hago la visualizacion al final del proceso. Existe la posibilidad de acelerar este proceso ?

Gracias por su ayuda

Re: Velocidad al pasar datos a XLS

Posted: Thu Mar 18, 2010 3:50 pm
by horacio
Fijate la clase TsBrowse de Manuel Mercado para pasar los datos de la tabla a un excel. Es muy veloz y además esta interesante. Yo usaba tExcelscrip pero tarda mucho en escribir datos, espero te sirva

Re: Velocidad al pasar datos a XLS

Posted: Thu Mar 18, 2010 6:16 pm
by Enrrique Vertiz
Otra opcion es la FILEXLS es rapidisima para creacion de archivos Excel.

Re: Velocidad al pasar datos a XLS

Posted: Thu Mar 18, 2010 10:33 pm
by sysctrl2
yo uso texcelScrip , y la verdad es bastante rapido, aqui un pedazo de codigo.

Code: Select all

oExcel := TExcelScript():New()
oExcel:Create( cFile )

oExcel:oSheet:Cells( 1, 01 ):Value = "codigo"
oExcel:oSheet:Cells( 1, 02 ):Value = "nombre"

nRow := 2
nStart := nRow
cMemo := ""

dbselectArea( cAlias  )
dbgotop()
while !eof()

     cMemo += field->codigo
     cMemo += chr(9)+field->nombre
     cMemo += CRLF
     nRow++
    if len(cMemo) >= 16000 .or. eof()

          oClip := TClipBoard():New()
          oClip:Clear()
          oClip:SetText( cMemo )
          cCell := "A" + Alltrim( Str( nStart ) )
          oRange := oExcel:oSheet:Range( cCell )
          oRange:Select()
          oExcel:oSheet:Paste()
          oClip:End()

          nStart := nRow

          cMemo := ""
      endif


      dbskip()
      sysrefresh()
end
de esta forma se hace bastante rapido, en archivos con miles de registros.
saludos..

Re: Velocidad al pasar datos a XLS

Posted: Fri Mar 19, 2010 4:33 am
by JoseGS
Gracias amigos voy a intentar las soluciones

Re: Velocidad al pasar datos a XLS

Posted: Sat Mar 20, 2010 3:47 pm
by George
Hola
A mi tambien me sucede lo mismo al usar ToExcel del xBrowse. Es muy lento, tardando hasta varios minutos en una tabla de unos cuantos cientos de registros.

Existe alguna forma de hacer mas rapido el paso a Excel desde Xbrowse?
Alguien ha modificado el metodo ToExcel() para hacerlo que funcione mas rapido?
Estoy usando FWH 2009.06

Gracias de antemano por sus sugerencias.

George

Re: Velocidad al pasar datos a XLS

Posted: Sat Mar 20, 2010 4:39 pm
by Ramon Paredes
Amigo JoseGS :

Te sugiero la clase Filexls es rapida, imaginate un reporte de 1800 registros en 12 segundos , es veloz, ya la he probado hasta con 20,000 registros y tiene un buen desempeño si necesitas ejemplos me avisas y te los envio,

Saludes desde Managua, Nicaragua

Ramon Paredes

Re: Velocidad al pasar datos a XLS

Posted: Sat Mar 20, 2010 5:07 pm
by Dioni
Hola Ramon

Me uno a los ejemplos que puedas compartir comparti aqui en el foro.
de echo nececitamos lo siguiente:

Ejemplos de como:

1.- Leer informacion de una hoja de excel a un archicho dbf

2.- Poner fonts, colores, centrado, etc en excel ya que no viene documentado

3.- Poder protejer/desprotejer los archivos excel y/o hojas de excel

4.- tablas dinamicas.

te agradeceremos mucho.

atte. Dioni de Lima - Peru

Re: Velocidad al pasar datos a XLS

Posted: Sun Mar 21, 2010 8:36 pm
by Ramon Paredes
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

Re: Velocidad al pasar datos a XLS

Posted: Mon Mar 22, 2010 3:27 am
by JoseGS
Hola Ramon

Tengo la FileXls.LIB que utilizaba en FW23 puedo usar la misma ahora con FWH o requiero otra ?

Re: Velocidad al pasar datos a XLS

Posted: Mon Mar 22, 2010 3:35 pm
by Ramon Paredes
JoseGS :

Te sugiero enlazar los prgs que son TFILEXLS.PRG, XLSFUNC.PRG, XLSERROR.PRG y los compilas y enlazas como uno mas de tu proyecto y listo te sirven con cualquier version de FWH o xharbour, la lib tendrias que recrearla para cada version,

Saludes desde Managua, Nicaragua

Ramon Paredes

Re: Velocidad al pasar datos a XLS

Posted: Sat Nov 05, 2011 10:04 pm
by elmoiquique
Como se puede Insertar una imagen con esta funcion en el archivo Excel de salida