Page 1 of 1
CLASE REPEXCEL
Posted: Tue Apr 19, 2011 2:28 pm
by IVAN TRACHTA
Hola, utilizo la clase repexcel para poder exportar desde treport a planillas excel.
Funciona perfecto simpre que los listados sean desde un archivo, si está basado en un array me genera el listado pero sin los registros (o sea el excel sólo tiene la cabecera del reporte y los títulos de las columnas)
Otro problema que detecté es que si defino un PICTURE en el reporte me tira error acceso al array en la línea TSALXLS:NEW(99). De todos modos este error esta también en el listado basado en arrays por lo que no se si su origen es por este motivo o siempre que utilizo PICTURES.
Saludos
Iván
Re: CLASE REPEXCEL
Posted: Thu May 05, 2011 1:32 pm
by IVAN TRACHTA
A nadie le ha ocurrido este problema?
Hay alguna otra clase para exportar a Excell desde el Preview?
Será que habrá que pasar el array a un archivo temporal y desde allí armar el listado?
Gracias y saludos
Iván
Re: CLASE REPEXCEL
Posted: Fri May 06, 2011 3:06 pm
by RenOmaS
Tienes que utilizar este bloque de codigo, antes del Activate del report.
Code: Select all
oRep:bPreInit := { || n:= 1 }
//donde n es tu contador que recorre la matriz/array.
Re: CLASE REPEXCEL
Posted: Fri May 06, 2011 4:55 pm
by FranciscoA
Hola Renomas.
¿Podrías indicarme cómo activar correctamente el oReport:CellView() en Repexcel?
Siempre he utilizado sin problemas tu librería REPEXCEL. Es excelente. Hasta hoy no había utilizado oReport:Cellview() en mis sistemas, pero un cliente me lo ha solicitado y no obedece. He revisado los prgs de la librería, pero francamente no encuentro donde meterle mano. ¿Hay alguien que lo haya hecho y pueda suministrarme un ejemplo?
He logrado que funcione parcialmente así:
IF oReport:lCreated
// oReport:lSeparator := .t.
//oReport:CellView()
oReport:lBoxOnTotal:=.t.
ENDIF
ACTIVATE REPORT oReport ;
ON CHANGE oReport:Separator()
Pero... me agrega una linea más, antes de cada total de Grupo, y es totalmente anti-estético.
Mucho agradeceré sus orientaciones.
Saludos.
Re: CLASE REPEXCEL
Posted: Fri May 06, 2011 5:59 pm
by RenOmaS
Experimenta modificar el method saydata de tsalxls
Code: Select all
METHOD SayData( nCol, nLine ) CLASS TSalXLS
LOCAL nFont, ;
nFor, ;
oCol := ::oRpt:aColumns[ nCol ], ;
nAlignament:= ALING_NULL, ;
uVal, ;
nFormat := 0, ;
nBorder := BORDER_NONE //ADICIONADO !!
IF nLine > len( oCol:aData)
RETURN NIL
ENDIF
nFont := ::cFont( eval( oCol:bDataFont ) )
If oCol:lGrid //ADICIONADO !!
nBorder := BORDER_ALL //ADICIONADO !!
EndIf //ADICIONADO !!
DO CASE
CASE oCol:aPad[ nLine ] == RPT_LEFT
nAlignament := ALING_LEFT
CASE oCol:aPad[ nLine ] == RPT_RIGHT
nAlignament := ALING_RIGHT
CASE oCol:aPad[ nLine ] == RPT_CENTER
nAlignament := ALING_CENTER
ENDCASE
uVal := Eval( oCol:aData[ nLine ] )
IF !empty( oCol:aPicture[ nLine ] ) .or. valtype( uVal ) == 'D' //Cuando es Fecha tambien env.
nFormat := ::cFormat( oCol:aPicture[ nLine ], valtype( uVal ) )
ENDIF
@ ::nRow, nCol XLS SAY uVal OF ::oXLS ;
FORMAT nFormat ;
FONT nFont ;
ALIGNAMENT nAlignament ;
BORDER nBorder //ADICIONADO !!
RETURN NIL
Re: CLASE REPEXCEL
Posted: Fri May 06, 2011 6:39 pm
by FranciscoA
Gracias por contestar, Renomas. Intentaré modificar el method que indicas, y te aviso.
Saludos.
Re: CLASE REPEXCEL
Posted: Fri May 06, 2011 8:48 pm
by FranciscoA
Renomas:
Lo he hecho así (no he logrado encontrar la solución modificando TSalxls):
IF oReport:lCreated
// oReport:lSeparator := .t.
//oReport:CellView()
// oReport:lBoxOnTotal:=.t.
ENDIF
ACTIVATE REPORT oReport ;
ON STARTGROUP ( oReport:NewLine(), EVAL(bSECCION) ) ; // ;
ON CHANGE oReport:Separator() ; //necesario cuando se usa RepExcel, para CellView
ON ENDGROUP oReport:BackLine(1) //necesario cuando se usa RepExcel, para CellView
No es lo mejor, pero se asemeja un poco más al Method CellView, cuando no se utiliza Repexcel.
Saludos.
Re: CLASE REPEXCEL
Posted: Sat May 07, 2011 5:03 pm
by FranciscoA
Lo he mejorado así:
ACTIVATE REPORT oReport ;
ON STARTGROUP ( oReport:NewLine(),;
oReport:NewLine(),; //Por repexcel
EVAL(bSECCION),;
if(!oReport:lFirstRow,oReport:Separator,) ) ; //por repexcel
ON CHANGE oReport:Separator() ; //necesario cuando se usa RepExcel, para CellView
ON ENDGROUP oReport:BackLine(1) //necesario cuando se usa RepExcel, para CellView
Saludos.
Re: CLASE REPEXCEL
Posted: Tue May 10, 2011 3:44 pm
by RenOmaS
Podes enviarme un ejemplo de como lo haces... e que version de fw utilizas?
Re: CLASE REPEXCEL
Posted: Tue May 10, 2011 9:10 pm
by FranciscoA
Hola Renomas, te he enviado el ejemplo solicitado a:
ducanlive@hotmail.com
Utilice la version 712.
Saludos