Clipper On Line • Ver Tópico - Estrutura básica para gerar uma listagem/relatório em Excel

Estrutura básica para gerar uma listagem/relatório em Excel

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Estrutura básica para gerar uma listagem/relatório em Excel

Mensagempor rochinha » 16 Nov 2018 13:03

Amiguinhos,

Estrutura básica para gerar uma listagem ou relatório em Excel:
Function XLSTotalVendas()
   LOCAL oExcel, oHoja
   LOCAL nRow := 1, nCol

   M->TOT_0001 := 0
   M->TOT_0002 := 0
   M->TOT_0003 := 0
   M->TOT_0004 := 0

   M->QUEBRAR  := .T.
   M->RESUMIR  := .T.

   /* ABERTURA E INDICES */
   USE ITENS // Contem os campos DATAPED(D), CUSTO(N,15,2), VALOR(N,15,2), DESCONTO(N,15,2)
   INDEX ON dataped // Sera usado como ponto de quebra

   CursorWait()

   oExcel := TOleAuto():New( "Excel.Application" )
   oExcel:WorkBooks:Add()

   oHoja := oExcel:Get( "ActiveSheet" )
   nRows := oHoja:UsedRange:Rows:Count()
   nCols := oHoja:UsedRange:Columns:Count()

   oHoja:PageSetup:Orientation  := 2
   oHoja:PageSetup:PrintGridlines := .t.

   // Margens
   oHoja:PageSetup:LeftMargin   := 0.25
   oHoja:PageSetup:RightMargin  := 0.25
   oHoja:PageSetup:TopMargin    := 0.25
   oHoja:PageSetup:BottomMargin := 0.25
   oHoja:PageSetup:HeaderMargin := 0.25
   oHoja:PageSetup:FooterMargin := 0.25

   // Area de Impressao
   oHoja:PageSetup:PrintArea = "$A$1:$O$60"

   // Define nome para planilha
   oHoja:name:='Tabela de Precos'

   // Toda planilha
   oHoja:Cells:Font:Name := "Arial"
   oHoja:Cells:Font:Size := 8

   // Formatando o titulo
   oHoja:Cells( 1, 1 ):Value := "NOME DO RELATORIO"
   oHoja:Cells( 1, 1 ):Font:Size := 18
   oHoja:Cells( 1, 1 ):Font:Name := "Arial"
   oHoja:Range( "A1:G1" ):HorizontalAlignment := 7
   oHoja:Cells( 1, 1 ):Select()

   nRow := 2
   nCol := 1

   DBGOTOP()
   /* USAR COM QUEBRA */
   /* ********************************************** */
   IF M->QUEBRAR
      M->QUEBRA_1 := dtos(dataped) // fara a quebra por data
   ENDIF
   /* */
   DO WHILE .T. // EOF()
      if nRow = 2
         //oSheet:Range("A:A"):Set("ColumnWidth",32) // AJUSTA TAMAÑO UN RANGO A UN VALOR
         // Colocando nomes nas colunas
         oHoja:Cells( nRow, nCol+0 ):Value := "Data"
         oHoja:Cells( nRow, nCol+1 ):Value := "Desconto"
         oHoja:Cells( nRow, nCol+2 ):Value := "Custo Total"
         oHoja:Cells( nRow, nCol+3 ):Value := "Valor Total"
         oHoja:Cells( nRow, nCol+4 ):Value := "Lucro Total"
         oHoja:Cells( nRow, nCol+5 ):Value := "Lucro (%)"
         // Formatando estilo
         oHoja:Cells( nRow, nCol+0 ):Font:Bold := .T. // :Font:Size / :Font:Color
         oHoja:Cells( nRow, nCol+1 ):Font:Bold := .T.
         oHoja:Cells( nRow, nCol+2 ):Font:Bold := .T.
         oHoja:Cells( nRow, nCol+3 ):Font:Bold := .T.
         oHoja:Cells( nRow, nCol+4 ):Font:Bold := .T.
         oHoja:Cells( nRow, nCol+5 ):Font:Bold := .T.
         // Formatando tamanho
         oHoja:Cells( nRow, nCol+0 ):ColumnWidth := 10
         oHoja:Cells( nRow, nCol+1 ):ColumnWidth :=  8
         oHoja:Cells( nRow, nCol+2 ):ColumnWidth := 14
         oHoja:Cells( nRow, nCol+3 ):ColumnWidth := 14
         oHoja:Cells( nRow, nCol+4 ):ColumnWidth := 14
         oHoja:Cells( nRow, nCol+5 ):ColumnWidth := 10
         // Formatando tamanho
         oHoja:Cells( nRow, nCol+0 ):Interior:ColorIndex := 6
         oHoja:Cells( nRow, nCol+1 ):Interior:ColorIndex := 6
         oHoja:Cells( nRow, nCol+2 ):Interior:ColorIndex := 6
         oHoja:Cells( nRow, nCol+3 ):Interior:ColorIndex := 6
         oHoja:Cells( nRow, nCol+4 ):Interior:ColorIndex := 6
         oHoja:Cells( nRow, nCol+5 ):Interior:ColorIndex := 6
         //
         nRow := 3
      endif
     
      /* USAR COM RESUMO */
      /* ********************************************** */
      IF M->RESUMIR
         M->QUEBRA_1=dtos(dataped)
         M->SUM_0001 := 0
         M->SUM_0002 := 0
         M->SUM_0003 := 0
         M->SUM_0004 := 0
         DO WHILE M->QUEBRA_1=dtos(dataped) // Faz enquanto nao QUEBRA
            M->SUM_0001 := M->SUM_0001 + desconto
            M->SUM_0002 := M->SUM_0002 + custo
            M->SUM_0003 := M->SUM_0003 + valor
            M->SUM_0004 := M->SUM_0004 + valor-custo
            SKIP
         ENDDO
         SKIP -1
      ELSE
         M->SUM_0001 := desconto
         M->SUM_0002 := custo
         M->SUM_0003 := valor
         M->SUM_0004 := valor-custo
      ENDIF
      /* */     
     
      // Formatando um campo
      oHoja:Cells( nRow, nCol+0 ):Value := dataped
      oHoja:Cells( nRow, nCol+1 ):NumberFormat := "###.###.##0,00"; oHoja:Cells( nRow, nCol+1 ):Value := M->SUM_0001
      oHoja:Cells( nRow, nCol+2 ):NumberFormat := "###.###.##0,00"; oHoja:Cells( nRow, nCol+2 ):Value := M->SUM_0002
      oHoja:Cells( nRow, nCol+3 ):NumberFormat := "###.###.##0,00"; oHoja:Cells( nRow, nCol+3 ):Value := M->SUM_0003
      oHoja:Cells( nRow, nCol+4 ):NumberFormat := "###.###.##0,00"; oHoja:Cells( nRow, nCol+4 ):Value := M->SUM_0004
      oHoja:Cells( nRow, nCol+5 ):NumberFormat := "###.###.##0,00"; oHoja:Cells( nRow, nCol+5 ):Value := div(M->SUM_0004,M->SUM_0003)*100
      // Somatoria dos subtotais
      oHoja:Cells( nRow, nCol+0 ):Font:Bold := .T.
      oHoja:Cells( nRow, nCol+2 ):Font:Bold := .T.
      oHoja:Cells( nRow, nCol+3 ):Font:Bold := .T.
      oHoja:Cells( nRow, nCol+4 ):Font:Bold := .T.
      //
      oHoja:Cells( nRow, nCol+2 ):Interior:ColorIndex := 6
      oHoja:Cells( nRow, nCol+3 ):Interior:ColorIndex := 6
      oHoja:Cells( nRow, nCol+4 ):Interior:ColorIndex := 6
      //

      SKIP
      /* */
      nRow := nRow + 1
      if eof()
         exit
      endif
      //SKIP
   ENDDO
   //
   oHoja:Cells( nRow, nCol+2 ):Value        := "CUSTO TOTAL"
   oHoja:Cells( nRow, nCol+3 ):Value        := "VALOR TOTAL"
   oHoja:Cells( nRow, nCol+3 ):Value        := "LUCRO TOTAL"
   nRow := nRow + 1
   oHoja:Cells( nRow, nCol+2 ):Font:Bold    := .T.
   oHoja:Cells( nRow, nCol+2 ):Font:Italic  := .T.
   oHoja:Cells( nRow, nCol+2 ):Font:Size    := 10
   oHoja:Cells( nRow, nCol+2 ):NumberFormat := "###.###.##0,00"
   oHoja:Cells( nRow, nCol+2 ):Value        := "=soma("+chr(64+nCol+2)+"3:"+chr(64+nCol+2)+alltrim(str(nRow-1))+")"
   //
   oHoja:Cells( nRow, nCol+3 ):Font:Bold    := .T.
   oHoja:Cells( nRow, nCol+3 ):Font:Italic  := .T.
   oHoja:Cells( nRow, nCol+3 ):Font:Size    := 10
   oHoja:Cells( nRow, nCol+3 ):NumberFormat := "###.###.##0,00"
   oHoja:Cells( nRow, nCol+3 ):Value        := "=soma("+chr(64+nCol+3)+"3:"+chr(64+nCol+3)+alltrim(str(nRow-1))+")"
   //
   oHoja:Cells( nRow, nCol+4 ):Font:Bold    := .T.
   oHoja:Cells( nRow, nCol+4 ):Font:Italic  := .T.
   oHoja:Cells( nRow, nCol+4 ):Font:Size    := 10
   oHoja:Cells( nRow, nCol+4 ):NumberFormat := "###.###.##0,00"
   oHoja:Cells( nRow, nCol+4 ):Value        := "=soma("+chr(64+nCol+4)+"3:"+chr(64+nCol+4)+alltrim(str(nRow-1))+")"
   //
   oExcel:Visible := .T.

   /* CASO QUEIRA IMPRIMIR */
   //oHoja:PrintOut() // Funciona OK

   /* CASO QUEIRA SALVAR */
   //oExcel:WorkBooks:SaveAs(cFilePath(GetModuleFileName(GetInstance()))+"\planilha.xls")

   oHoja:End()
   oExcel:End()
   CursorArrow()
   RETURN
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4532
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 796 vezes
Mens.Curtidas: 242 vezes

Estrutura básica para gerar uma listagem/relatório em Excel

Mensagempor JAIR RANGEL » 03 Set 2019 12:04

Boa tarde, Rochinha!

A rotina acima parece estár em FiveWin. Sabe dizer se temos algo semelhante para HMG?

Estou precisando gerar relatório como plinilha para o Excel e essa rotina parece ser o caminho. Mas se tiver em HMG vai ajudar muito...

Desde já, abraço!

Obrigado!

: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

Estrutura básica para gerar uma listagem/relatório em Excel

Mensagempor JoséQuintas » 03 Set 2019 13:06

Aonde viu fivewin? é Harbour somente (talvez XHarbour também).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 17942
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Estrutura básica para gerar uma listagem/relatório em Excel

Mensagempor rochinha » 11 Set 2019 19:49

Amiguinhos,

Deve ser pelas funções CursorWait e CursorArrow, mas basta ignorá-las.

Quanto ao TOLEAuto() basta trocar por winOleCreate() ou similar existente no (x)Harbour ou Harbour 3.xxx
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4532
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 796 vezes
Mens.Curtidas: 242 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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