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