by diegopolverelli » Tue Aug 19, 2008 3:03 pm
Antonio, yo use un esquema similar a de los samples, utilizando OLESETPROPERTY y OLEGETPROPERTY. ¿como se puede invocar de la manera que me decis vos? tenes algun ejemplo. Te adjunto un codigo donde leo de una base y lleno una tabla xls.
Otra cosa, cuando la tabla es grande, por ej, 10000 reg. el proceso de llenar el .xls tarda muchisimo (10 /20 minutos) ¿que puede ser?
Gracias. Atte.
//---------------------
FUNCTION IMPO_LCOS(XLISPRE, odlg)
LOCAL oWnd, oOwc, hActiveWindow, nCounter, hsheet, x, cell, font, xfila, xfin, format
LOCAL XVERSION, xcompleta
// en la base ini guardo un parametro con la version del office
SELE 99
USE C:\TEMPO\INI SHARED
LOCA FOR INI->PARAMETRO='VERSION'
IF !EOF()
DO CASE
CASE VAL(LEFT(INI->VALOR,1))=1
XVERSION="OWC9.Spreadsheet"
CASE VAL(LEFT(INI->VALOR,1))=2
XVERSION="OWC10.Spreadsheet"
CASE VAL(LEFT(INI->VALOR,1))=3
XVERSION="OWC11.Spreadsheet"
CASE VAL(LEFT(INI->VALOR,1))=4
XVERSION="OWC12.Spreadsheet"
OTHERWISE
XVERSION="OWC"+ALLTRIM(SUBSTR(INI->VALOR,2,2))+".Spreadsheet"
ENDCASE
ELSE
XVERSION="OWC11.Spreadsheet"
ENDIF
SELE 99
USE
odlg:disable()
DEFINE WINDOW oWnd Title "IMPORTACION DE LISTA DE COSTOS "+alltrim(upper(xlispre))
@ 0, 0 ACTIVEX oOwc;
PROGID XVERSION
// PROGID "OWC10.Spreadsheet"
hActiveWindow = oOwc:GetProp( "ActiveWindow" )
OleSetProperty( hActiveWindow, "ColumnHeadings", 1, "Codigo" )
OleSetProperty( hActiveWindow, "ColumnHeadings", 2, "Descripcion" )
OleSetProperty( hActiveWindow, "ColumnHeadings", 3, "Precio" )
hSheet = oOwc:GetProp( "ActiveSheet" )
x:=1
sele 1
use &empre\costo.sx shared
COPY TO C:\TEMPO\TMPCOSTO FOR COSTO->CLI_LISPR=XLISPRE
USE C:\TEMPO\TMPCOSTO ALIAS COSTO
SELE 2
USE &EMPREST\ART.SX INDEX &EMPREST\ARTC SHARED
CURSORWAIT()
if msgyesno("Edita la lista de costos completa? (esta operacion tarda mas tiempo)","Atencion")
xcompleta=.t.
else
xcompleta=.f.
endif
SELE 1
INDEX ON COSTO->ART_CODIG TO C:\TEMPO\TMPART3
go top
do while !eof()
XART_CODIG:=COSTO->ART_CODIG
SELE 2
SET SOFTSEEK OFF
SEEK XART_CODIG
IF !EOF()
OleSetProperty( hActiveWindow, "RowHeadings", x, Str( x ) )
OleSetProperty( hSheet, "Cells", x, 1, "'"+XART_CODIG )
SELE 2
OleSetProperty( hSheet, "Cells", x, 2, ART->ART_DESCR )
SELE 1
OleSetProperty( hSheet, "Cells", x, 3, COSTO->PRECIO )
ENDIF
x:=x+1
if xcompleta=.f. .and. x>10
sele 1
go bott
endif
sele 1
skip
enddo
CURSORARROW()
// OleSetProperty( hActiveWindow, "ViewableRange", "A1:D6" )
hSheet = oOwc:GetProp( "ActiveSheet" )
oWnd:oClient = oOwc
ACTIVATE WINDOW oWnd valid VERIFICA(HSHEET,xlispre,odlg)
RETURN NIL