Clipper On Line • Ver Tópico - MERGE - Colagem de dados via Command Line

MERGE - Colagem de dados via Command Line

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

MERGE - Colagem de dados via Command Line

Mensagempor rochinha » 29 Nov 2007 00:10

Amiguinhos,

O assunto .RTF começou a dar asas a imaginação e me permitiu compartilhar mais um trecho de código de meu sistema, o qual adaptei para funcionar stand-alone.

Trata-se de um utilitário de linha de comando que recebe parametros e faz a colagem destes num arquivo .DOC ou .RTF.

É super fácil de usá-lo:

OLEMerge arquivo.doc "&#VARIAVEL1#&;&#VARIAVEL1#&" "CONTEUDO A;CONTEUDO B"

Exemplo:
OLEMerge doc.rtf "&#NOME#&;&#ENDERECO#&" "Jose Carlos da rocha;Rua Dr M.R.Mattoso, 50"

Explicação:
&#variavel#& - Toda variavel deve estar entre &# e #& e podem estar em qualquer posição do corpo do documento .DOC ou .RTF.
; - É o separador de conteudo. A função StringToArray cria o Array se encarrega de transformar o conjunto de dados string em um array usável pela função.

Baixem o exemplo com codigo completo de http://www.5volution.com.br/downloads/f ... emerge.zip e boa sorte.
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Mensagempor Pablo César » 29 Nov 2007 09:45

Legal Rochinha ! Baixei, testei e gostei. Entendo que seu aplicativo faz aquela substituição de "variáveis" ou TAGS dentro do arquivo .DOC ou .RTF e o faz de forma interativa sem precisar alterar em disco utilizando a interface "OLE" e que desta forma deixa o documento aberto para impressão sem precisar gravar. Isso é ótimo, pois eu faria um arquivo RTF no Word (como você fez, com cabeçalhos e tudo mais) e depois de gravado daria uma ATTRIB +R (Read-only) para esse mesmo arquivo e desta forma não se perderia na tentativa do usuário "teimoso" querer re-gravar esse arquivo na hora de ser exibido para impressão, digamos.

Obrigado pela sua contribuição ! Quem sabe eu, algum dia possa ir a São Paulo à rua Rua Dr M.R.Mattoso, 50 para dar um abraço no colega... (aproveitei para saber o seu endereço... hihihi, imagino eu...)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor rochinha » 29 Nov 2007 13:06

Amiguinho

Será bem vindo!
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Mensagempor Pablo César » 29 Nov 2007 15:35

Obrigado Rochinha, para mim será um prazer.

Estava pensando... quantos de nós ja não passamos por uma certa dificuldade quanto a impressão de ETIQUETAS. Pelo que vemos o Word pode ser um grande aliado. Daí pensei:

Farua um RTF modelo no Word uma folha completa para impressão etiquetas determinando os campos, será que daria para elaborar um aplicativo que pudesse ler DBF e ainda SKIPar de tal nº registro até tal número (a princípio poderia fazer em dbf temporário que vá desde o começo ao fim do BD), prenchendo/substituindo as TAGs, variáveis ou nome de campo de dbf ?

Digamos que numa página podem serem impressas 99 etiquetas (9 colunas x 11 linhas) e que pudesse prencher cada etiqueta como se utilizasse uma MATRIZ. Técnicamente não vejo problema, se eu tentasse fazer, você poderia compilar ? Claro, que terás que ter um pouquinho de paciência pois eu não programo em FiveWin e eu acho que poderei-me guiar do seu código exemplo OLEMARGE.PRG.

Sei que você compilou com FiveWin for Harbour e se eu mandar poderia compilar para nós ? O quê você acha ?. Seria possível você me acompanhar nesse projeto ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor rochinha » 30 Nov 2007 11:37

Amiguinho

Comece e vamos ver onde da pra chegar.
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Mensagempor Pablo César » 30 Nov 2007 11:51

Ok, então.

Para inicio, deverão ser passados os seguintes parâmetros:

- Nome do RTF
- Nome do DBF
- Nome dos campos do DBF que serão utilizados
- Quantidade de colunas
- Quantidade de linhas

Digamos para esta primeira fase, serão considerados todos os registros do DBF, então prepararia-se antes o DBF ja filtrado e ordenado. Mas como é etiquetas a ordem não é tão importante. Se caso o número de registros que contém esse DBF seja maior do que pode caber numa página, haverá necessidade de copiar o modelo de forma que seja inserida no mesmo documento. Ou fazer um segundo chamado, tudo dependerá dos recursos da LIB do FiveWin. Irei fazer as alterações e irei posta-la aqui, se você me permitir Rochinha.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor Pablo César » 03 Dez 2007 09:51

Eu poderia ter enviado por email para você Rochinha compilar, mas achei melhor postar aqui a minha idéia assim desta forma permita alguém fazer uma crítica/sugestão que possa advir. E aproveitei carona no seu post e como não obtive resposta negativa decidí postar aqui o código fonte:

#include "FiveWin.ch"

#define CR             Chr(13)
#define LF             Chr(10) 

#define BS             "\"

Function OLEMerge( cDOCFile, cDBFile, cVFields, cQtCol, cQtLin, lDOCPreview )
/* O parametro lDOCPreview nao consegui utilizar no seu código anterior.
Este serviria para visualizar o arquivo ou até imprimi-lo, não é ?*/

LOCAL cHomeDir := CurDrive() + ":" + BS + CurDir() + BS
LOCAL oDoc,oWord,oText,oFind,cFound,bError,cFile,cText

IF cDOCFile=NIL
   MsgInfo( "Falta parametro sobre o arquivo do Word." )
ELSE
   cFile := cHomeDir + cDOCFile
   if !File(cFile)
      MsgInfo( "Arquivo "+cFile+" nao encontrado." )
      QUIT
   endif
ENDIF
IF cDBFile=NIL
   MsgInfo( "Falta parametro sobre o arquivo DBF." )
ELSE
   if !File(cHomeDir + cDBFile + (IF(".DBF" $ cDBFile,"",".DBF")) )
      MsgInfo( "Arquivo "+cDBFile+" n„o encontrado." )
      QUIT
   endif
   USE (cHomeDir + cDBFile) READONLY
ENDIF
aVFields := StringToArray( cVFields, ";" )
vt := len( aVFields )
IF vt = 0
   MsgInfo( "Precisa informar os nomes dos campos do DBF." )
   QUIT
ENDIF
IF VAL(cQtCol)=0
   MsgInfo( "A quantidade de colunas para etiquetas nao esta correta." )
   QUIT
ELSE
   cQtCol := VAL(cQtCol)
ENDIF
IF VAL(cQtLin)=0
   MsgInfo( "A quantidade de linhas para etiquetas nao esta correta." )
   QUIT
ELSE
   cQtLin := VAL(cQtLin)
ENDIF
IF lDOCPreview=NIL
   lDOCPreview := .t.
ELSE
   lDOCPreview := .f.
ENDIF

cTLins:=cQtLin*VT // Obtem quatidade de etiquetas por pagina

aVWords  := {}
FOR I=1 TO cQtCol
    AADD(aVWords,{})
NEXT
vc := 1
i := 1
Do While !EoF()  // Transcrevendo o conteúdo dos campos do DBF para MATRIZ
   AADD(aVWords[vc],(&(aVFields[i])))
   vc ++
   If vc > cQtCol
      vc := 1
      i ++
      If i > vt
         i := 1
      Endif
   Endif
   SKIP
ENDDO

CursorWait()
oWord :=TOleAuto():New( "Word.Application" )
oDoc  :=oWord:Get( "Documents" )
oWord:Set("Visible",.f.)
oDoc:Open( cFile )
oText:=oWord:Selection()
oFind:=oText:Find()

for vl = 1 to cTLins // Vai processar incialmente apenas a primeira p gina
    for vc = 1 to cQtCol
        oFind:Set("ClearFormatting")
        oFind:Text:="&#*#&"
        oFind:Wrap:=1
        oFind:Set("MatchWildcards",.t.)
        oFind:Execute()
        cFound:=Alltrim(SubStr(aVFields[i],3,Len(Alltrim(aVFields[i]))-4))
        cFound:=sSwap(cFound,{Chr(145),Chr(146)},"'")
        cFound:=sSwap(cFound,{Chr(147),Chr(148)},'"')
        if Empty(cFound)
           exit
        endif
        oText:TypeText( aVWords[vc,vl] )
    next
next

if lDOCPreview
   oWord:Set("Visible",.t.)
else
   oWord:PrintOut()
   oWord:Quit()
endif
CursorArrow()
return nil

function StringToArray( cString, cSeparator )
LOCAL nPos
LOCAL aString := {}
DEFAULT cSeparator := ";"
cString := ALLTRIM( cString ) + cSeparator
DO WHILE .T.
   nPos := AT( cSeparator, cString )
   IF nPos = 0
      EXIT
   ENDIF
   AADD( aString, SUBSTR( cString, 1, nPos-1 ) )
   cString := SUBSTR( cString, nPos+1 )
ENDDO
RETURN ( aString )

Function sSwap( cChar, c1, c2 )
LOCAL n1,n2:=-1,ac1,f
IF ValType(c1)="A"
   ac1:=c1
   FOR f=1 TO Len(ac1)
      c1:=ac1[f]
      WHILE .T.
         n1:=At(Upper( c1 ),Upper( cChar ))
         IF n1=0 .OR. n1=n2
            EXIT
         ENDIF
         cChar:=SubStr( cChar, 1, n1-1 )+c2+SubStr( cChar, n1+Len(c1), Len(cChar)-Len(c1) )
         n2:=n1
      ENDDO
   NEXT
ELSE
   WHILE .T.
      n1:=At(Upper( c1 ),Upper( cChar ))
      IF n1=0 .OR. n1=n2
         EXIT
      ENDIF
      cChar:=SubStr( cChar, 1, n1-1 )+c2+SubStr( cChar, n1+Len(c1), Len(cChar)-Len(c1) )
      n2:=n1
   ENDDO
ENDIF
return cChar


Cabe dizer que me basei no código-fonte do Rochinha e este é apenas o primeiro passo. Se este procedimento for fazer as buscas e substituições das TAGs de forma sequencial e linhar, isto é, obdecendo a regra busca/substituição de esquerda à direita. Então, imagino que servirá para fazer apenas uma página de teste. Rochinha, se você puder compilar e disponibiliza-lo no site da sua disponibilidade e gostaria de ver o resultado.
Editado pela última vez por Pablo César em 03 Dez 2007 14:14, num total de 1 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor rochinha » 03 Dez 2007 10:33

Amiguinho

Eu farei isto, aguarde.
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Mensagempor Pablo César » 19 Dez 2007 17:09

Tem muitos erros o código-fonte que postei para ser compilado ?. Ou não funcionou essa lógica, Rochinha ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor rochinha » 14 Jan 2008 08:18

Mister Pablo

me envie o seu arquivo .DOC que voce preparou para o merge de etiquetas tenho algumas ideias.
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Mensagempor Pablo César » 15 Jan 2008 15:51

Eu tinha mandado para fivolution@hotmail.com no dia 03/12/2007, devia ter enviado em algum outro endereço ?. O meu email não retornou erro algum e é esse que consta no seu perfil daqui do fórum. Mandei o .DOC e o DBF exemplo. Hoje estarei re-enviando e solicitarei confirmação de recebimento, me avise por favor, caso não tenha chegado.

Obs.: O arquivo do Word que foi enviado tem extensão RTF
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor rochinha » 16 Jan 2008 07:30

Amiguinho

Recebido, vou anallisar, valew.
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Mensagempor Pablo César » 13 Abr 2008 10:30

E aí Rochinha ? Ainda não conseguiu algum resultado para esta questão de etiquetas ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Mensagempor rochinha » 13 Abr 2008 11:49

Amiguinho,

Pensei que ia conseguir fazer vc esquecer...
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: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes

Esquecer...

Mensagempor Maligno » 13 Abr 2008 12:18

Pablo César NUNCA esquece. Pablo César NUNCA perdoa. :)))))))
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 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