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

 

Re: MERGE - Colagem de dados via Command Line

Mensagempor fladimir » 19 Out 2010 12:00

Deu CERTOOOOOOOOOOOOOOOOOOOOOOO codigo q usei...

#include 'hbcompat.ch'
#define CRLF Chr(13) + Chr(10)

Function Main
      Olemerge('c:\oleword\Dup.doc', '&#NOME#&;&#ENDERECO#&;&#NOMEEMP#&;&#FONEEMP#&;&#FONEEMP#&;&#ENDERECOEMP#&;&#BAIRROEMP#&;&#CIDADEEMP#&;&#CEPEMP#&', ;
                                     'Teste; ADRESS Teste;Autocom Informatica;(99) 9999-9999;(99) 9999-9999;Rua de Exemplo, 1234; Centro; CidadeExemplo; 12345-678', )
Return

Function OLEMerge( cDOCFile, cVFields, cVWords, lDOCPreview )
   LOCAL cHomeDir := " "
   LOCAL oDoc,oWord,oText,oFind,cFound,bError,cFile,cText
   lDOCPreview := .t.
   cFile := "c:\oleword\Dup.doc"        //cHomeDir + cDOCFile
   aVFields := StringToArray( cVFields, ";" )
   aVWords  := StringToArray( cVWords, ";" )
   if File(cFile)
      oWord :=TOleAuto():New( "Word.Application" )
      oDoc  :=oWord:Documents:Open( cFile )
      oWord:Visible := .t.
      oText:=oWord:Selection()
      oFind:=oText:Find()
      for i = 1 to len( aVFields )
//        oFind:ClearFormatting := .T.
          oFind:Text:=Alltrim(Upper(aVFields[i])) // "&#"+Alltrim(aVFields[i])+"#&"
          oFind:Wrap:=1
          oFind:MatchWildcards := .t.
          if 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[i] )
          endif
      next
      if lDOCPreview
         oWord:Visible := .t.
      else
//         oWord:PrintOut()
         oWord:Quit()
      endif
//      oWord:Visible := .T.
      oWord:WindowState := 1
      oWord:Quit()
/////////////////     
   else
      alert( "Arquivo "+cFile+" nao encontrado." )
   endif
return nil

**************************************************
Function StringToArray( cString, cSeparator )
   LOCAL nPos
   LOCAL aString := {}
   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


Só um detalhe Rochinha q fiz de um jeito mas existiria uma forma mais simples? Seguinte exemplo tem no Documento várias vezes &#NOME#& e ai como procedo? o q fiz como pode reparar no codigo acima foi colocar nos parametros da função várias vezes a TAG, mas queria algo automático, ou melhor, mais inteligente não eu saber qtas TAGS tem o DOC e sim a função procurar qtas TAGS existirem iguais as passadas no parametro e trocar todas....

Sds.

Grande abraço.
:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2435
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

MERGE - Colagem de dados via Command Line

Mensagempor suportecbi » 23 Ago 2016 19:45

Caro Fladimir

Coloque um Do While no lugar do IF oFind:Execute()
assim vai funcionar da forma que voce precisa.

Exemplo
Do While oFind:Execute()
.x.x.
Enddo

Atenciosamente

Marcos Branco
CBI SISTEMAS :)Pos
Passar Conhecimento é uma grande sabedoria, guardar ele é uma grande ignorância.
Avatar de usuário

suportecbi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 09 Out 2007 17:17
Cidade/Estado: Goiania-Go
Curtiu: 0 vez
Mens.Curtidas: 1 vez

MERGE - Colagem de dados via Command Line

Mensagempor suportecbi » 23 Ago 2016 20:02

Boa noite!

A rotina funcionou direitinho, estou muito feliz, agora posso fazer diversar cartas. Parabens a esse forum, tem me ajudado bastante.
abracos a todos do forum

Marcos Branco
C.B.I. Sistemas :)Pos
Passar Conhecimento é uma grande sabedoria, guardar ele é uma grande ignorância.
Avatar de usuário

suportecbi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 09 Out 2007 17:17
Cidade/Estado: Goiania-Go
Curtiu: 0 vez
Mens.Curtidas: 1 vez

MERGE - Colagem de dados via Command Line

Mensagempor fladimir » 23 Ago 2016 21:04

vlw
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2435
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

MERGE - Colagem de dados via Command Line

Mensagempor rubens » 24 Ago 2016 09:47

Perfeito...

Aqui também funcionou redondinho...

Obg

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Anterior



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

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