Velocidad al pasar datos a XLS

Velocidad al pasar datos a XLS

Postby JoseGS » Thu Mar 18, 2010 2:12 am

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
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Velocidad al pasar datos a XLS

Postby horacio » Thu Mar 18, 2010 3:50 pm

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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Velocidad al pasar datos a XLS

Postby Enrrique Vertiz » Thu Mar 18, 2010 6:16 pm

Otra opcion es la FILEXLS es rapidisima para creacion de archivos Excel.
Enrrique Vertiz Pitta
Lima-Peru
xHb 1.23.1026X, Fwh 23.04, MySQL 8.0.X, SQLLIB 1.9m, SQLRDD
Enrrique Vertiz
 
Posts: 514
Joined: Fri Oct 07, 2005 2:17 pm
Location: Lima - Peru

Re: Velocidad al pasar datos a XLS

Postby sysctrl2 » Thu Mar 18, 2010 10:33 pm

yo uso texcelScrip , y la verdad es bastante rapido, aqui un pedazo de codigo.

Code: Select all  Expand view
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..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Velocidad al pasar datos a XLS

Postby JoseGS » Fri Mar 19, 2010 4:33 am

Gracias amigos voy a intentar las soluciones
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Velocidad al pasar datos a XLS

Postby George » Sat Mar 20, 2010 3:47 pm

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
George
 
Posts: 724
Joined: Tue Oct 18, 2005 6:49 pm

Re: Velocidad al pasar datos a XLS

Postby Ramon Paredes » Sat Mar 20, 2010 4:39 pm

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
... Desde la Tierra de lagos y Volcanes......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Re: Velocidad al pasar datos a XLS

Postby Dioni » Sat Mar 20, 2010 5:07 pm

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
Dioni
 
Posts: 36
Joined: Tue May 12, 2009 8:45 pm
Location: Lima - Perú

Re: Velocidad al pasar datos a XLS

Postby 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......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Re: Velocidad al pasar datos a XLS

Postby JoseGS » Mon Mar 22, 2010 3:27 am

Hola Ramon

Tengo la FileXls.LIB que utilizaba en FW23 puedo usar la misma ahora con FWH o requiero otra ?
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Velocidad al pasar datos a XLS

Postby Ramon Paredes » Mon Mar 22, 2010 3:35 pm

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
... Desde la Tierra de lagos y Volcanes......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Re: Velocidad al pasar datos a XLS

Postby elmoiquique » Sat Nov 05, 2011 10:04 pm

Como se puede Insertar una imagen con esta funcion en el archivo Excel de salida
Fivewin 11.07
elmoiquique
 
Posts: 297
Joined: Wed May 16, 2007 9:40 pm
Location: Iquique Chile


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 49 guests