Clipper On Line • Ver Tópico - Gravar relatório como XLS

Gravar relatório como XLS

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Gravar relatório como XLS

Mensagempor JAIR RANGEL » 22 Abr 2009 15:08

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 de usuário

JAIR RANGEL
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 177
Data de registro: 19 Jul 2005 16:01
Cidade/Estado: RIO DE JANEIRO
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

Re: GRAVAR RELATÓRIO COMO XLS

Mensagempor sygecom » 24 Abr 2009 13:21

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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7005
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Re: GRAVAR RELATÓRIO COMO XLS

Mensagempor JAIR RANGEL » 26 Abr 2009 19:58

Olá, Sygecon !

Obrigado por responder.
Vou verificar os fontes.
:xau
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
Avatar de usuário

JAIR RANGEL
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 177
Data de registro: 19 Jul 2005 16:01
Cidade/Estado: RIO DE JANEIRO
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

Gravar relatório como XLS

Mensagempor Mario Mesquita » 27 Set 2011 16:35

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.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 13 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro