XLS para xBrowse desde TFILEXLS

XLS para xBrowse desde TFILEXLS

Postby thefull » Tue Sep 21, 2010 9:08 am

Amigos, os dejo 'otra' manera de crear un XLS directamente sin usar OLE, de esta manera no hace falta tener el MSOFFICE instalado.

Esto viene a cuento, porque el method toexcel(), atentos, os puede dejar tirado en cualquier momento, con el cliente al lado.
Lo más duro es que te pase en una demo, y en 4 ordenadores distintos, los errores del Office eran todos aleatorios, o
daba error en la llamada al CreateObject( "Excel.Application" ), y no había forma, otras veces eran en
oSheet:Cells( nPasteRow, 1 ):Select(), diciendo que no existía oSheet, etc...
En mi máquina funciona todo perfecto, pero en esas máquinas, donde se suponía tendría que funcionar, no iban.

Decidido a no volver a usarlo, implementé esta solución para salir del paso y todos contentos ;-)

Code: Select all  Expand view

#include "FiveWin.ch"
#include "FileXLS.ch"

function ExportXLS( oBrw )
  Local oXLS, nCol, nFormat, nFormat2, nFont, nLen, nCol, nFila, x, cText

   XLS oXLS FILE ".\file.xls" AUTOEXEC
       DEFINE XLS FORMAT nFormat PICTURE '#,##0.00'
       DEFINE XLS FORMAT nFormat2 PICTURE '#0'
       DEFINE XLS FONT nFont1 NAME "Arial" HEIGHT 16 BOLD

       @ 1,1 XLS SAY "MI XLS BROWSE" FONT nfont1 OF oXls  
       @ 1,8 XLS SAY "Fecha:" + DTOC( Date() ) OF oXls  

       // CABECERAS
       nLen  := len( oBrw:aCols )
       nCol  := 1
       nFila := 3
       for x := 1 to nLen
           if !oBrw:aCols[x]:lHide  // Si la columna no es oculta
              cValor := oBrw:aCols[x]:cHeader
              XLS COL nCol WIDTH oBrw:aCols[x]:nDataLen OF oXLS
              @ nFila,nCol XLS SAY cvalor BORDER OF oXls  
              nCol++  // Las columnas solo las que estan visibles
           endif
       next

       nCol  := 1
       nFila++   // Una fila despues del Header

        // DATOS
        DbSelectArea( oDbf:cAlias )
        oDbf:GoTop()
        while !oDbf:Eof()
              for x := 1 to nLen
                  if !oBrw:aCols[x]:lHide  // Si la columna no es oculta
                      cText := oBrw:aCols[x]:Value()
                      if Valtype( cText ) = "N" // Si es numeric
                        if oBrw:aCols[x]:nDataDec = 0
                           @ nFila, nCol XLS SAY cText FORMAT nFormat2 OF oXls
                        else
                           @ nFila, nCol XLS SAY cText FORMAT nFormat OF oXls
                        endif
                      else
                         @ nFila, nCol XLS SAY OemToAnsi( cText )  OF oXls
                      endif
                      nCol++  // Las columnas solo las que estan visibles
                  endif
              next
             nFila++
             nCol := 1
             oDbf:Skip()
        end While

   ENDXLS oXLS
 
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 729
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 75 guests