Página 2 de 3

Re: Gerar relatorio para o EXCEL

Enviado: 13 Mai 2009 11:54
por asimoes
Olá Ana,

Segue em anexo o seu pedido.
XLSFunc.zip
Funções para gerar um XLS
(61.7 KiB) Baixado 747 vezes

Re: Gerar relatorio para o EXCEL

Enviado: 15 Out 2009 11:53
por spereira
Olá pessoal,

Gostaria de aproveitar o tópico para perguntar uma coisa relacionada com ele.

Eu gero uma tabela em .DBF pelo meu sistema e depois a renomeio para .xls para enviar ao cliente.
No meu Excel abre normalmente, mas no cliente não abre.
Eu sei que há alguma forma de configurar no Excel para que seja possível abrir este tipo de formato (dbf) mas não lembro como.
Alguém pode me ajudar?

Obrigado
Sérgio

Re: Gerar relatorio para o EXCEL

Enviado: 15 Out 2009 12:13
por Augusto
Com o EXCEL já aberto clicar em:

ARQUIVO/ABRIR/Arquivos do Tipo

Alterar para: Arquivos do dBase (*.dbf)

Re: Gerar relatorio para o EXCEL

Enviado: 15 Out 2009 17:02
por alxsts
Olá!

O tópico https://pctoledo.org/forum/viewto ... f=1&t=9019 também é relacionado ao assunto. Tem um link para o ClipWks.

Re: Gerar relatorio para o EXCEL

Enviado: 27 Mai 2010 08:58
por heveraldo
Galera,

Como proceder para inserir uma imagem (logomarca) na criação do relatório ?

Abraços,

Heveraldo

Re: Gerar relatorio para o EXCEL

Enviado: 28 Mai 2010 18:51
por gilsonpaulo
Esta maneira como faço foi com a ajuda daqui do forum:

Código: Selecionar todos

*----------------------------
*       GB44.PRG       -       Imprime Total da LIsta de Precos
*----------------------------

#define   nomeREL         "Lista.xls"

PRIVATE grant:=SPACE(2),sbant:=SPACE(4),cpag:=0,clin:=0,nrcop:=0,venda:=0,;
        bfgrp:=SPACE(40),bfsbg:=SPACE(40),bfitm:=SPACE(40),custo:=0,item:=0,;
        bfvlr:=0.00,bfvl1:=SPACE(9),bfvl2:=0.00,bfvl3:=SPACE(9),sep:=SPACE(1),;
        estoque:=0,scusto:=0,svenda:=0,pcusto:=0,pvenda:=0



SELECT 1
USE CADMER SHARED ALIAS MER

IF NETERR()
	Mensagem("Ha mais pessoas acessando o arquivo de precos")
	TONE(1000,2)
	INKEY(0)
	RETURN
ENDIF

SET INDEX TO NOMMER

SELECT MER
	SELECT MER
	SET FILTER TO SUBSTR(DESMER,1,1) <> "*" .AND. SUBSTR(DESMER,1,1) <> " "
	GO TOP
GO TOP

Mensagem("Aguarde, gerando " + nomeREL)

SET CONSOLE OFF
SET DEVICE TO PRINT
SET PRINTER TO (nomeREL)


?? CHR(18)


//Cabe()


DO WHILE .NOT. EOF()  .AND. INKEY() !=27

//        IF clin>=60
//                EJECT
//                Cabe()
//        ENDIF
//        item = 1
        item = item+1
        estoque = ANTMER+ENTMER-SAIMER
        custo = 0
        venda = 0
        pcusto = 0
        pvenda = 0

        IF estoque < 0
                estoque = 0
        endif

        IF MULTI < 1000
                pcusto = PRECST
                pvenda = PREMER
        ELSE
                pcusto = PRECST/MULTI
                pvenda = PREMER/MULTI
        ENDIF
        
        IF estoque < 0
                estoque = 0
        ENDIF

        bfitm=TRIM(DESMER)
	bfitm=bfitm+REPLICATE(".",(40-LEN(bfitm)))

vpcusto:=STRTRAN(LTRIM(STR(pcusto,14,2)),'.',',')
vpvenda:=STRTRAN(LTRIM(STR(pvenda,14,2)),'.',',')

vLista:=bfitm+chr(9)+vpcusto+chr(9)+vpvenda+chr(9)+LTRIM(STR(estoque,8,0))+chr(9)+LTRIM(STR(ICMFIS,2,0))+chr(9)+;
        "=B"+LTRIM(STR(item,4,0))+"*D"+LTRIM(STR(item,4,0))+chr(9)+;
        "=C"+LTRIM(STR(item,4,0))+"*D"+LTRIM(STR(item,4,0))

        @ clin,00 SAY vLista


//        @ clin,01 SAY bfitm
//        @ clin,42 SAY pcusto PICTURE "@E 999,999.99"
//        @ clin,54 SAY pvenda PICTURE "@E 999,999.99"
//        @ clin,66 SAY estoque PICTURE "@E 999999.999"
//        @ clin,77 SAY ICMFIS PICTURE "99"
        custo = estoque*pcusto
        venda = estoque*pvenda
        scusto = scusto + custo
        svenda = svenda + venda

	SKIP
        clin++
ENDDO
        @ clin,00 SAY "Total Preco Custo.:"
        @ clin,20 SAY chr(9)+"=soma(F1"+":F"+LTRIM(STR(item,4,0))+")"
        clin++
        @ clin,00 SAY "Total Preco Venda.:"
        @ clin,20 SAY chr(9)+"=soma(G1"+":G"+LTRIM(STR(item,4,0))+")"
        clin++
        @ clin,00 SAY "Total de Itens....:"
        @ clin,20 SAY chr(9)+LTRIM(STR(item,5,0))
EJECT

offPrinter()
SET RELATION TO
mp=1
SELECT 1
USE
SELECT 2
USE 
SELECT 3
USE
RETURN
//==========================================
STATIC PROCEDURE Cabe()
cpag=cpag+1
clin=1
@ clin,02 SAY firma
@ clin,58 SAY DTOC(DATE())
@ clin,72 SAY "Pg"
@ clin,75 SAY cpag PICTURE "9999"
clin=clin+1
@ clin,42 SAY "LISTA  DE  PRECOS"
clin=clin+1
@ clin,02 SAY REPLICATE("-",77)
clin=clin+1
@ clin,47 SAY "CUSTO"
@ clin,59 SAY "VENDA"
@ clin,67 SAY "ESTOQUE"
@ clin,75 SAY "ICMS" 
clin++
RETURN

Gerar relatorio para o EXCEL

Enviado: 29 Mai 2010 09:29
por Pablo César
heveraldo escreveu:Como proceder para inserir uma imagem (logomarca) na criação do relatório ?
Eu nunca fiz em Clipper, mesmo utilizando aquela biblioteca clipwks que gera uma planilha Excel na versão 4, não daria para inserir imagem e desconheço como fazer em Clipper. Mas acho Heveraldo que você vai conseguir a solução em [x]Harbour pois lá inclusive ja conseguiram reproduzir vários resultados favoráveis na geração de planilhas Excel, veja por exemplo: https://pctoledo.org/forum/viewto ... CEL#p58015

Re: Gerar relatorio para o EXCEL

Enviado: 31 Mai 2010 19:43
por JoséQuintas
Já usei muito script pra isso.
O Clipper gerando um arquivo VBS para automatizar o Excel.
E o próprio Excel preencher a planilha, formatar, etc., e salvar no final.

Depois usei ODBC, já que tem pra acessar qualquer base de dados, seja Access, Excel, DBF, MySql, etc.
Desta forma não depende de Excel instalado.

Faltou: também já usei o arquivo CVS, mas não é compatível com as novas versões, não sei porque.

Re: Gerar relatorio para o EXCEL

Enviado: 01 Jun 2010 10:43
por Pablo César
O Clipper gerando um arquivo VBS para automatizar o Excel.
E o próprio Excel preencher a planilha, formatar, etc., e salvar no final.
Ahhh claro ! Legal, não tinha pensado nisso ! José, você tem algum pequeno exemplo de cada, só para dar uma espiadinha ??

Gerar relatorio para o EXCEL

Enviado: 01 Jun 2010 11:57
por JoséQuintas
Ao instalar Excel, o objecto "Excel" fica disponível no Windows.
O script só faz uso dele e de seus métodos.
A sintaxe é totalmente do aplicativo Excel, do objeto que o Excel libera.
Dá pra pegar exemplos do xHarbour que utilizam CreateObject() e adaptar pra script, pra usar no clipper.
Mesmo usando no xHarbour, a sintaxe seria a mesma, exceto a mudança de "." por ":"

Código: Selecionar todos

Dim objExcel
objExcel = wscript.CreateObject("Excel.Application")
objExcel.Visible = True ' Para ver o Excel trabalhando na planilha
ObjExcel.Workbooks.Add
ObjExcel.Workbooks(1).Activate
ObjExcel.Workbooks(1).Worksheets.Add
ObjExcel.Workbooks(1).Worksheets(1).Select
ObjExcel.Cells(3,1).Value = "teste"
ObjExcel.Cells(4,1).Value = 5
ObjExcel.Cells(5,1).Value = 10
ObjExcel.Cells(6,1).Value = "=@SUM(C4:C5)"
ObjExcel.Range("A1:F5").AutoFormat True
ObjExcel.Workbooks(1).SaveAs "teste"
ObjExcel.Quit
Set ObjExcel = Nothing
Msgbox("Geração Concluída")
Nota de Moderação:
por Pablo César: Mensagem reditada para correção do código fontes, a pedido do autor.

Re: Gerar relatorio para o EXCEL

Enviado: 01 Jun 2010 18:00
por rochinha
Amiguinhos,

Para completar o post anterior.

Para imprimir basta acrescentar uma linha:

Código: Selecionar todos

ObjExcel.Workbooks(1).SaveAs "teste"
ObjExcel.ActiveSheet.PrintOut 
ObjExcel.Quit
Set ObjExcel = Nothing

Re: Gerar relatorio para o EXCEL

Enviado: 15 Nov 2010 14:00
por Hasse
Boa tarde colegas.

O código apresentado pelo nosso colega Quintas cabe como uma luva na minha necessidade.

Tenho uma planilha em Excel, algo parecido com uma Nota Promissória, que deve ser preenchida com valores e depois impressa. Esta planilha tem algumas macros que são usadas na navegação, formatação e impressão da página final.

O banco de dados em DBF existe, e poderia ser passado automaticamente para a planilha Excel.

Se eu pudesse ler o arquivo XLS como um objeto, gravar valores neste objeto e abrir no Excel como proposto pelo Quintas, seria "A Solução".

Mas não consigo fazê-la funcionar. Já substitui os "pontos" por ":" e nada. Só dá erro de sintaxe, "Incomplete statement or unbalanced delimiters", e "WITH Message [T] with no WITH OBJECT in sight".

Alguém pode me ajudar, dando algumas dicas, de como se transporta aquele exemplo para o xHarbour ?

Re: Gerar relatorio para o EXCEL

Enviado: 15 Nov 2010 14:35
por rochinha
Amiguinho,

Faça o teste com o seguinte .VBS que usa um arquivo .TXT contendo dados:

Código: Selecionar todos

Nome, Idade
Maligno, 40
Pablo, 48
Quintas, 49
Rochinha, 120
Inicie as variaveis usadas:

Código: Selecionar todos

Option Explicit
Const adCmdTable = &H0002

Dim dsn, file
Dim rs, con
Dim Title, txt
Criando o DSN para acesso aos dados:

Código: Selecionar todos

dsn = "MyText"
file = GetPath() + "Data\Text.txt"

' Titulando
Title = "ADO - Exemplo de Acesso"
txt = "Conectando a: " & file & " via " & "ODBC." & vbCRLF
Criando o objeto de conecção:

Código: Selecionar todos

Set con = WScript.CreateObject("ADODB.Connection")
con.Open dsn         ' DSN -> Defina antes no Painel de Controle com acesso a texto
Preparação da coneçcção
txt = txt & con & vbCRLF & vbCRLF
[/code]

Criando a conecção e capturando os dados

Código: Selecionar todos

Set rs = WScript.CreateObject("ADODB.Recordset")
rs.Open file, Con, , , adCmdTable

txt = txt & "Nome" & vbTab & "Idade" & vbCRLF
Neste momento, lê-se os dados

Código: Selecionar todos

Do While Not rs.EOF    ' all entries
   txt = txt & rs("Nome") & vbTab & rs("Idade") & vbCRLF
   rs.MoveNext           ' next record
Loop 
Apresenta-se os dados e fecha-se a conecção:

Código: Selecionar todos

MsgBox txt, vbOkonly , Title
con.Close
WScript.Quit()
Funções extras:

Código: Selecionar todos

'#### Funcoes ####
Function GetPath
' Retrieve path to the script file
 DIM path
 path = WScript.ScriptFullName  ' script file name
 GetPath = Left(path, InstrRev(path, "\"))

End Function      
' End
Junte tudo e bata, quer dizer, salve nume arquivo com extensão .VBS e execute para testes. Use o conteúdo para acrescentar o recurso em seu Excel.VBS.

Re: Gerar relatorio para o EXCEL

Enviado: 15 Nov 2010 14:44
por Hasse
Valeu Mano Rochinha.

Grande dica, e maior a solução...

Pô, eu nem sabia que isto era possível...

Obrigado.

Re: Gerar relatorio para o EXCEL

Enviado: 15 Nov 2010 15:31
por rochinha
Amiguinhos,

Ainda é possivel se passar parâmetros para o script via linha de comando.

Primeiro é necessário DIMensionar as variaveis usadas:

Código: Selecionar todos

Dim Dado1
Dim Dado2
Devemos informar ao script que o mesmo irá gerenciar argumentos:

Código: Selecionar todos

set args = wscript.Arguments
Podemos criticar os parâmetros para que nosso script funcione a contento. Neste exemplo eu defino que meu script irá manipular 2 parâmetros:

Código: Selecionar todos

If args.count <> 2 Then
   WScript.echo("Uso: MeuScript <Arg1> <Arg2>")
   Wscript.quit(1)
End If
Neste momento passo meus parâmetros para variáveis internas e posso manipular como quizer:

Código: Selecionar todos

Dado1 = args(0)
Dado2 = args(1)
ou:

Código: Selecionar todos

ObjExcel.Cells(3,1).Value = args(0)
ObjExcel.Cells(4,1).Value = args(1)
Ai só a imaginação, pode definir até onde se vai.

O Clipper, por sua impossibilidades de manipular o S.O. de forma direta, deve sempre usar uma ponte para integração, o que não o torna menos profissional.

Existem os que dizem que isso não seria profissional, colocando a culpa na aplicação.

O bom profissional, irá sim, sacar de meios externos e periféricos para completar o seu intento, ou sua aplicação.

Então mãos a obra.