Gravar relatório como XLS

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

Gravar relatório como XLS

Mensagem por JAIR RANGEL »

Olá, Pessoal !

Alguém poderia me indicar uma maneira de gravar um relatório como planilha do Excel !
Estou gravando um DBF temporário durante o processamento do relatório. Ao final deste, renomeio o DBF para XLS. Assim funciona.
Mas gostaria de emitir o realtório direto no formato XLS !
Assim, não seria necessário gravar um DBF.

Não sei se me fiz entender.
Mesmo assim, obrigado pra quem responder !

:D
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: GRAVAR RELATÓRIO COMO XLS

Mensagem por sygecom »

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.

Código: Selecionar todos

***********************
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:

Código: Selecionar todos

*********************
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:

Código: Selecionar todos

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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JAIR RANGEL
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 19 Jul 2005 16:01
Localização: RIO DE JANEIRO
Contato:

Re: GRAVAR RELATÓRIO COMO XLS

Mensagem por JAIR RANGEL »

Olá, Sygecon !

Obrigado por responder.
Vou verificar os fontes.
:xau
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Gravar relatório como XLS

Mensagem por Mario Mesquita »

Boa tarde, colegas.

Estou com esse problema tambem, de fornecer um levantamento em formato .XLS e as dicas do forum estão me ajudando a buscar a solução. Falta coisa, mas vamos nessa...

Minha pergunta é: Alguem tem o sabe onde pegar alguma documentação sobre a OLE dos aplicativos Windows? Já vi com os tutoriais que os colegas aqui me arrumaram, vi nos downloads do forum, mas não encontrei nada sobre.

Alem de precisar de mais coisas sobre a criação/atualização do .XLS, como por exemplo, comando de gravação da planilha, etc. o conhecimento dos comandos da OLE possibilitam acesso a diversos recursos do ambiente muito uteis.

Se alguem tiver alguma informação, agradeço desde já.

Sds,
Mario.
Responder