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