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

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

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

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

Mensagem por rochinha »

Amiguinhos,

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

Código: Selecionar todos

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 [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
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:

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

Mensagem por JAIR RANGEL »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem por JoséQuintas »

Aonde viu fivewin? é Harbour somente (talvez XHarbour também).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

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

Mensagem por rochinha »

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 [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder