by rlblanco » Thu Apr 17, 2008 7:58 am
Hola Victor Manuel
Creo que en este tema no puedo aportar más de lo que se ve por el foro. Todos mis conocimientos para programar OLE como interface con EXCEL los he adquirido mirando aquí.
Mi mayor problema es interpretar los ejemplos en visual basic u otros lenguajes que veo en la ayuda de excel e internet y transcribirlos a la sintaxis de Harbour/fivewin, es por ello que no soy capaz de conseguir construir desde cero, es decir dandole todas sus propiedades, rangos, etc..., un gráfico incrustado en una hoja excel dando instrucciones a través de Ole desde mis aplicaciones.
Por si te puede aportar algo,esto es un pequeño fragmento de código a modo de ejemplo de como accedo yo Excel con OLE :
oExcel:=TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Add()
oSheet:= oExcel:Get( "ActiveSheet" )
oSheet:= oExcel:sheets:item(1)
oSheet:name:='Radar'
oSheet:= oExcel:sheets:item(2)
oSheet:name:='Datos'
oSheet:activate()
oExcel:visible := .t.
oExcel:Sheets( "Datos" ):Cells( 1, 1 ):Value := "AREA"
oExcel:Sheets( "Datos" ):Cells( 3, 1 ):Value := "NOMBRE PILAR"
oExcel:Sheets( "Datos" ):Cells( 2, 4 ):Value := "NOMBRE PERSONA"
oExcel:Sheets( "Datos" ):Cells( 2, 6 ):Value := "ROL PERSONA"
oExcel:Sheets( "Datos" ):Cells( 2, 7 ):Value := "COMPETENCIAS"
oExcel:Sheets( "Datos" ):Cells( 2, 8 ):Value := "VAL. REQUER."
oExcel:Sheets( "Datos" ):Cells( 2, 9 ):Value := "VAL. ACTUAL"
*oSheet:Range("A:A"):Set("ColumnWidth",32) // AJUSTA TAMAÑO UN RANGO A UN VALOR
oExcel:Sheets( "Datos" ):Cells( 2, 1 ):Value := XFAM_PRO
oExcel:Sheets( "Datos" ):Cells( 4, 1 ):Value := VDEN_PILAR
fila := 3
SELECT 15
REGIS:=RECNO()
DBGOTOP()
CANT:=0
DO WHILE !EOF()
CANT+=1
VNOMBRE :=15->MATRIC+' - '+ALLTRIM(APELL1)+' '+SUBSTR(NOMBRE,1,2)+'.'
VROL :=15->ROL
oExcel:Sheets( "Datos" ):Cells( fila, 4):Value := VNOMBRE
oExcel:Sheets( "Datos" ):Cells( fila, 6 ):Value := VROL
XFILTR:=XFAM_PRO + VC_PILAR + 15->MATRIC
SELECT 16 // WCM_MACO.DBF
DBGOTOP()
16->(ORDSCOPE( TOPSCOPE,NIL ) )
16->(ORDSCOPE( BOTTOMSCOPE,NIL ) )
DBGOTOP()
16->(ORDSCOPE( TOPSCOPE ,XFILTR ) )
16->(ORDSCOPE( BOTTOMSCOPE,XFILTR ) )
DBGOTOP()
SELECT 16
DO WHILE !EOF()
IF 16->REQUERIDO =' '
*
ELSE
oExcel:Sheets( "Datos" ):Cells( fila,7 ):Value := 16->COMPET
oExcel:Sheets( "Datos" ):Cells( fila,8 ):Value := 16->REQUERIDO
oExcel:Sheets( "Datos" ):Cells( fila,9 ):Value := 16->NEW_EVALU
ENDIF
SKIP
fila+=1
ENDDO
SELECT 15
fila+=2
SKIP
ENDDO
oExcel:Sheets( "Datos" ):Range("A1:I30000"):Columns:AutoFit() // FIJA AJUSTE TAMAÑO DE RANGO
IF CANT > 0 // DIBUJO LOS RADARES
oExcel:Sheets(1):Select() // me posiciono en la hoja 1 de gráficos.
oGraficos:=oExcel:Sheets("Radar"):ChartObjects()
// oGraficos:Add(izquierda,arriba,ancho,largo);
oChart:=oGraficos:Add(10,70,350,260)
oChart:activate()
** apartir de aquí mis problemas
oChart:Chart:ChartWizard(source:=oExcel:Sheets("Datos"):Range("H3:H6"))
oChart:Chart:ChartWizard(gallery:= 4)
oChart:Chart:ChartWizard(title:="New Chart")
oChart:ChartType("xlRadarMarkers")
ENDIF
**-- más cosas..........
oExcel:quit()
oExcel:=nil
SELECT 15
DBGOTO(REGIS)
MUESTRA(oLbx)
RETURN NIL
*********************************************
Saludos.