Olá Jair,
Abaixo tem alguns exemplos de como gerar excel:
Exemplo de como gerar um Excel apartir de um BROWSE na tela, esse pode ser mais util para você que esta em Hwgui, mas pode facilmente ser migrado para qualquer LIB visual.
***********************
Function Gera_Excel(oTB)
***********************
local oSheet
local i,linha
Local cText := ""
LOCAL nRecord := 0, nCount := 0
TRY
oExcel := GetActiveObject( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH
MsgStop( "Erro! O Excel não esta Ativado ou Não instalada nesse Computador","Aviso do Sistema")
RETURN
END
END
oExcel:WorkBooks:Add()
oSheet = oExcel:ActiveSheet
for i := 1 TO Len(oTB:aColumns)
cCell := oTB:aColumns[i]:heading
oSheet:Cells( 1, i ):Value = cCell
next
Eval (oTB:bGoTop) // start from the top
linha=2
WHILE ! EOF() .AND. EVAL(oTB:bWhile)
for i := 1 TO Len(oTB:aColumns)
oCol := oTB:aColumns[i]:block
uColData := Eval(oCol)
do case
case ValType(uColData) == "C" // characters
if ! Empty(oTB:aColumns[i]:picture)
cCell := Transform (alltrim(uColData), oTB:aColumns[i]:picture)
else
cCell := alltrim(uColData)
endif
cCell="'"+cCell
case ValType(uColData) == "N" // numbers
cCell := uColData
case ValType(uColData) == "L" // logicals
cCell := if (uColData, "Sim", "Nao")
case ValType(uColData) == "D" // dates
cCell := uColData
otherwise
cCell := "error"
endcase
oSheet:Cells( linha, i ):Value = cCell
next
IF EVAL(oTB:bFor)
nCount++
ENDIF
linha++
DBSKIP()
ENDDO
Eval (oTB:bGoTop)
oSheet:Rows( "1:1" ):Font:bold:=.t.
oSheet:Columns:AutoFit()
oExcel:Visible := .t.
Return NIL
Exemplo para gera excel para console a partir do tbrowse:
*********************
Function TB2Excel(oTB)
*********************
local oExcel := CREATEOBJECT( "Excel.Application" )
local oSheet
local i,linha
oExcel:WorkBooks:Add()
oSheet = oExcel:ActiveSheet
for i := 1 TO oTB:ColCount
oCol := oTB:GetColumn(i)
cCell := oCol:Heading
oSheet:Cells( 1, i ):Value = cCell
next
Eval (oTB:goTopBlock) // start from the top
linha=2
do while .t.
for i := 1 TO oTB:ColCount
oCol := oTB:GetColumn(i)
uColData := Eval(oCol:Block) // column data (of yet unknown type)
do case
case ValType(uColData) == "C" // characters
if ! Empty(oCol:picture)
cCell := Transform (alltrim(uColData), oCol:picture)
else
cCell := alltrim(uColData)
endif
cCell="'"+cCell
case ValType(uColData) == "N" // numbers
cCell := uColData
case ValType(uColData) == "L" // logicals
cCell := if (uColData, "Sim", "Näo")
case ValType(uColData) == "D" // dates
cCell := uColData
otherwise
cCell := "error"
endcase
oSheet:Cells( linha, i ):Value = cCell
next
nTemp := Eval (oTB:SkipBlock, 1)
if nTemp != 1
exit
endif
linha++
enddo
Eval (oTB:goTopBlock)
oSheet:Rows( "1:1" ):Font:bold:=.t.
oSheet:Columns:AutoFit()
oExcel:Visible := .t.
return NIL
Exemplo de Excel com Grafico:
FUNCTION EXCEL3_CHART
Local oExcel, oHoja, oChart
Local aDbf:={}
GERAFILE() // gera um nome temporario e guarda em cFILE
// Creamos el archivo DBF de prueba
AADD(Adbf,{"ENE","N",7,0})
AADD(Adbf,{"FEB","N",7,0})
AADD(Adbf,{"MAR","N",7,0})
AADD(Adbf,{"ABR","N",7,0})
dbcreate(cFILE,aDbf)
// Lo cargamos con datos de prueba
use (cFILE)
append blank
Replace ENE with 34,;
FEB with 24,;
MAR with 78,;
ABR with 22
append blank
Replace ENE with 8,;
FEB with 16,;
MAR with 5,;
ABR with 54
append blank
Replace ENE with 28,;
FEB with 12,;
MAR with 33,;
ABR with 88
USE // Cerramos el archivo DBF
// Abrimos Excel
oExcel:= CreateObject( "Excel.Application" )
// Verificamos si hay error
if Ole2TxtError() != 'S_OK'
MsgInfo('Excel no esta disponible','Advertencia')
Return
endif
oExcel:Visible := .T. // Hacemos visibles los ca,bios
oExcel:Workbooks:Open(cFILE) // Abrimos el BDF
oExcel:Set("DisplayAlerts",.F.) // Deshabilitamos mensajes de Error
oHoja:=oExcel:Get( "ActiveSheet" ) // Activamos la hoja
oHoja:Range("A1:D4"):Select() // Definimos Rango
oChart:=oExcel:Charts:Add() // Creamos una grafico de barras
oChart:Hastitle:=.T. // Definimos el titulo
oChart:ChartTitle:Text:="Titulo dos Grafico"
oExcel:Visible := .t.
RETURN