Page 1 of 1

oReport:Say() en REPEXCEL [II]

Posted: Tue Apr 01, 2008 1:58 am
by jllinas
Hola, sigo con la misma cosa...

Bueno, definitivamente no hay manera de hacer un reporte con SAY(), para luego volcarlo a Excel (a través del Preview). La unica forma que encontre es declarando una variable, desde el principio, que me indique a la REPEXCEL, que se quiere llevar la salida a Excel. Asi, que las cosas quedan como sigue:

1.- Declarar lExcel := .T.

2.- Crear el reporte como sigue:

Code: Select all

REPORT oReport ;
  TITLE ..... ;
  FONT ..... ;
  PEN ....... ;
  HEADER .....;
  FOOTER .....;
  DEVICE ....

COLUMN .....
COLUMN .....
COLUMN .....
[mas definiciones de columnas]

END REPORT

ACTIVATE REPORT oReport ON INIT SayRpt( oReport )

// ------------
static Function SayRpt( oReport )

wPlsSalida(.T., oReport, lExcel )

oArchivo:GOTOP()
DO WHILE oArchivo:EOF()

     oReport:StartLine()
     oReport:Say(1, oArchivo:Campo1)
     oReport:Say(2, oArchivo:Campo2)
     [Otras columnas a imprimir]
     oReport:EndLine()

     oArchivo:Skip()
ENDDO

wPlsSalida(.F., oReport, lExcel )

RETURN NIL
La funcion wPlsSalida es la siguiente:

Code: Select all

FUNCTION wPlsSalida(lBoxOn, oRpt, lExcel )
IF lBoxOn
   DO CASE
     CASE lExcel
        wPlsWait(.T.,"Generando Archivo Excel.... espere ")
        oRpt:lSalida := .T.
        oRpt:oSalida := TSalXls():New( oRpt, AllTrim( Left( oRpt:cName, 8 ) ) + '.xls' )
        oRpt:oSalida:Stabilize()
        oRpt:oSalida:FormatColumns()
        oRpt:oSalida:StartPage()

   ENDCASE
ELSE
   DO CASE
     CASE lExcel
        wPlsWait( .F. )
        oRpt:oSalida:oXLS:SetDisplay(,,,,.F.,.F.,.T.,.T.,.F.)
        oRpt:oSalida:oXLS:End()

   ENDCASE
ENDIF
RETURN( NIL )
La funcion wPlsWait() es un tipo de WaitOn() WaitOff() que muestra un mensaje por pantalla.

Funciona de maravillas.... PERO: me envia la "cabecera" del reporte a la impresora (OJO: Solo la cabecera, nada mas...), y eso no lo quiero !!! Quisiera que no imprimiera nada.

No se como decirle a la clase que NO IMPRIMA, que solo se enviará a un Libro de Excel !

Pienzo que podría enviarlo a una impresora "nula", pero no se como hacerlo.....

¿Alguien le a metido mano a esto? ¿o soy el único "loco" en la comunidad?

Gracias anticipadas...

Posted: Tue Apr 01, 2008 8:39 am
by Antonio Linares
Julio,

Podrías probar a hacer:

REPORT oReport ... PREVIEW

De esa forma solo tendrías que cerrar la ventana del preview.
Tal vez te sirva.

Posted: Tue Apr 01, 2008 11:54 am
by jllinas
Hola Antonio,

Pues la verdad que ya lo había probado, y así sí funciona...

Lo único es que no me parece muy "elegante" que digamos. Solo quiero saber si pueda haber otra opción...

Abrazos,