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

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Rochinha escreveu:Pensei que ia conseguir fazer vc esquecer...
Hihihi não esqueço, não... hihihi Mas não esquenta, Rochinha. Você não tem obrigação de fazer algo sem vontade ou sem tempo. Eu estou muito curioso mais a título de aprendizagem e por quê não utilizá-lo caso chegue a funcionar.
Maligno escreveu:Pabo César NUNCA esquece e NUNCA perdoa
Meeeeu até parece uma frase obtida de filmes de Western... hihihihi Ja que você falou Maligno... hoje também lembrei de você e queria saber como está indo o aperfeiçoamento da WAPI ?
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 do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Sabe que pensei num Western mesmo? Com Clint Eastwood.
Pablo César, o implacável!
Pablo César, desarmado e perigoso! :))))


WAPI? O que é WAPI? É de comer? :)
[]'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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: MERGE - Colagem de dados via Command Line

Mensagem por rochinha »

Amiguinhos

O tempo passou, muita correria, minha versão 8.0 de meu sistema ja saiu e tive de mexer na parte relativa a newsletter.

Então era chegada a hora de utilizar a rotina que exemplifiquei anteriormente, mas com melhorias as quais irão ajudar a quem precisar, inclusive quem usa Clipper puro.

A versão 2.0 do Command Line OLEMerge saiu e estou disponibilizando apenas o executável para uso e testes.

Ele continua usando .RTF ou .DOC para interagir, mas agora com .DBF. Isto mesmo ficou mais fácil e o resultado me surpreendeu.

OLEMerg2 arquivo.DOC|RTF tabela.DBF

O arquivo .DOC ou .RTF deve contem campos mesclados pela ferramenta de mala direta do Word, pois é neste momento que voces irão vincular as variaveis da tabela que contem os registros ao corpo do documento.

A tabela.DBF deve contem os campos que fazem parte do documento e não precisa ser a tabela oficial, podendo ser uma tabela temporária contendo somente os registros que se quer mesclar.

Bom sem mais delongas baixem o mesmo do link: http://www.5volution.com.br/downloads/f ... merge2.zip e mãos a obra.

Não testei com etiquetas mas acho que deve funcionar normalmente.

Me reportem algum erro.

Obs: Usei o Word 2003 para editar e criar o documento.
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
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Re: MERGE - Colagem de dados via Command Line

Mensagem por EANDRIOLI »

ROCHA...

Tudo bem...

viu... testei seu prog para mesclar dados com Word. Percebi que está dando erro, ou o Word nao é aberto com o .doc arquivo quando utilizo variaveis do Clipper na linkedição (exemplo: &cliente - para pegar o conteudo da var).

Notei que funciona com duas variaveis, mais que isso não.

O conteudo das variaveis precisa ser retirado os espaços a direita.

A mesclagem faço assim:

OLEMERGE ERASMO.DOC "&#varword1#&;&#varword2#&;&#varword3#&" "&clipervar1;&clipervar2;&clipervar3"

Poderia exemplificar melhor usando com .dbf.

Se alguem tiver outra opção poderia nos passar aqui.

Obrigado!!! Abraços....

Erasmo
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: MERGE - Colagem de dados via Command Line

Mensagem por fladimir »

Pessoal, não estou conseguindo, já procurei, no fórum até fiz um MERGE de exemplos de colegas como Rochinha, Leonardo, Pablo, El Chaco, Pepi Legal e outros em tópicos semelhantes e na minha imaginação e o resultado foi o código abaixo q da o erro abaixo:

Código:

Código: Selecionar todos

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

#define wdFormatDocument   0  // .DOC
#define wdFormatRtf        6  // .RTF

PROCEDURE Main
	Boleto_Word()
return nil

********************
Function BOLETO_WORD
********************
Local vPATH := 'c:\',  aArray_CAMPOS := {}
//PRIVATE cPrinterName, cPrinterName_OLD := GetDefaultPrinter()
//New_PRINTSETUP( @cPrinterName )  // seleciona a impressora
//SETDEFAULTPRINTER(cPrinterName)  // define a impressora como padrão para o word imprimir direto

//GravaLog("IMPRESSÃO DE BOLETO COM LAYOUT PERSONALIZADO")
IF FILE(vPath+"arquivo.doc")
   AADD(aArray_CAMPOS,{"[aEMP]"    ,"Nome da empresa"} )
   AADD(aArray_CAMPOS,{"[aENDEMP]" ,"Endereço da empresa"} )
   Subistitui_Word( aArray_CAMPOS, vPATH+"arquivo.doc")
ELSE
   alert("O Sistema não achou o arquivos, Favor Revisar")
ENDIF
//SETDEFAULTPRINTER(cPrinterName_OLD)  // volta a impressora que era padrão
Return

*******************************************
Function Subistitui_Word( aCampos , cArqDoc)
*******************************************
local cDoc_Temp := GeraFile()+".doc" //
LOCAL oWord, oText, oDoc, oFind

IF File( cArqDoc )
   __copyfile( cArqDoc, (cDoc_Temp) )  // Salva um novo do original

    TRY
         oWord := GetActiveObject( "Word.Application" )
    CATCH
         TRY
            oWord := CreateObject( "Word.Application" )
         CATCH
            Alert( "ERROR! Word not avialable. [" + Ole2TxtError()+ "]" )
            RETURN
         END
    END
   
   oWord:Visible := .F. //PARA NÃO VISUALIZAR O DOCUMENTO
   oDoc := oWord:Documents:Open(cDoc_Temp)  //ABRE O WORD

   for x=1 to len( aCampos )
       oTexto := oDoc:Range()
       oFind  := oTexto:Get( "Find" )
       oFind:Set( "Text", aCampos[x,1] )
       oFind:Set( "Forward", .T. )
       oFind:Set( "Wrap", INT(1) )
       oFind:Set( "Format", .f.            )
       oFind:Set( "MatchCase", .f.         )
       oFind:Set( "MatchWholeWord", .f.    )
       oFind:Set( "MatchWildcards", .f.    )
       oFind:Set( "MatchSoundsLike", .f.   )
       oFind:Set( "MatchAllWordForms", .f. )
       oFind:Invoke( "Execute")

       DO WHILE oFind:Get( "Found" )    // Reemplaza todas las ocurrencias que coincidan
          oTexto:Set( "Text", aCampos[x,2] )
          oFind:Invoke( "Execute")
       Enddo
   next
   oWord:PrintOut()   //PARA IMPRIMIR DIRETO
   oWord:Invoke( "Quit",0)
*   oWord:QUIT()
else
   alert("O Sistema não achou o arquivo: ( " + cArqDoc + " ) dentro da pasta, Favor Revisar")
endif
return nil

Function GERAFILE
Local cFILE := GETENV("temp")+ "\TEMP"+ ALLTRIM( STR( HB_RandomInt(99999) ))
RETURN(cFILE)
Erro:

Código: Selecionar todos

Error WINOLE/1009  No exported method: RANGE (DOS Error -2147418111)
Called from WIN_OLEAUTO:RANGE(0)
Called from SUBISTITUI_WORD(54)
Called from BOLETO_WORD(23)
Called from MAIN(8)
O arquivo.doc é o do exemplo do Rochinha q ele postou aki no fórum, esta em anexo.

O q quero é mesclar os dados, ai pra cima esta escrito Boleto mas é pq não mudei os nomes só pra testar e entender.
Eu até consegui com a ajuda de colegas em outro tópico ir até o Open e Visualizar e tal, mas no exemplo ai de cima ele parece q para na parte q iria procurar os dados para trocar.

Alguém tem idéia???

Sds.
Sucesso!!! :)Pos
Anexos
arquivo.doc
(5.45 KiB) Baixado 168 vezes
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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: MERGE - Colagem de dados via Command Line

Mensagem por rochinha »

Amiguinho,

Trabalho avançados com ligações via OLE, ACTIVEX ou DDE exigem um conhecimento ou leitura de parametros e métodos dos objetos envolvidos. Se colocar-mos parametros ou métodos que não existem ou não são mais suportados com certeza obterem estes erros.

Código: Selecionar todos

      oTexto := oDoc:Range()
Não terei tempo de pesquisar para realçar a resposta, mas RANGE é usado para blocar células em planilhas e não usei em meu exemplo.

Para que o seu documento possa ser lido é necessário trocar o conteúdo acima por este.

Código: Selecionar todos

      oTexto := oDoc:Selection()
Algum recursos de OCXes e DLLs do Windows muitas vezes não estão visiveis para o uso ou não estão liberados para uso em aplicativos não Micro$oft.
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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: MERGE - Colagem de dados via Command Line

Mensagem por fladimir »

Continuo parado colegas, se alguém puder ajudar, preciso mesclar dados de um DBF com um Documento do Word, baixei o Olemerge dos links no inicio do topico e tentei mas esta dando erro, tentei compilar o codigo q tem em anexo até compila (Uso Harbour 2.xxx MSVC Console) mas da erro.

Sds.

Sucesso!!!
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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: MERGE - Colagem de dados via Command Line

Mensagem por rochinha »

Amiguinho,

Voce consegue com o mais basico dos testes algum exito?

Exemplo: faça o teste mais simples conectando o objeto WinWord via OLE, onde voce consiga pelo menos abrir o Word na tela.

Feito isto agregue as propriedades que definem as caracteristcas da tela como, menus, barras, etc.

Conseguindo os passos acima vá colocando cada chamada de método ou propriedade do exemplo, testando, verificando em que ponto voce obtem um erro, pois a versão de seu Office pode ter alguma modificação nos objetos do WinWord que possam causar o problema.

Quando produzi o aplicativo e o código, fiz muitos testes com o Office 2003 e 2007.
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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: MERGE - Colagem de dados via Command Line

Mensagem por fladimir »

Sim Rochinha eu consigo abrir, definir fonte, o q eu não consigo é mandar procurar um determinado campo e substituir...

Exemplo no DOC/RTF contem:

&#NOME#&

&#ENDERECO#&

Quero substituir por:

Joao da Silva

Rua das Amoreiras, 203


Não consigo o ultimo codigo q estou tentando é o seu do link abaixo, com algumas leves mudanças...:

http://www.5volution.com.br/downloads/f ... merge2.zip

Segue código como esta:

Código: Selecionar todos

//#include "FiveWin.ch"

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

#define BS             "\"

Function Main
        Olemerge('doc.rtf', '&#NOME#&;&#ADRESS#&', 'Teste; ADRESS Teste', )
Return

Function OLEMerge( cDOCFile, cVFields, cVWords, lDOCPreview )
   LOCAL cHomeDir := ""
   LOCAL oDoc,oWord,oText,oFind,cFound,bError,cFile,cText
//   DEFAULT lDOCPreview := .t.
   lDOCPreview := .t.
   cFile := "doc.rtf"        //cHomeDir + cDOCFile
   aVFields := StringToArray( cVFields, ";" )
   aVWords  := StringToArray( cVWords, ";" )
   if File(cFile)
//      CursorWait()
      oWord :=TOleAuto():New( "Word.Application" )
      oDoc  :=oWord:Get( "Documents" )
      oWord:Set("Visible",.f.)
      oDoc:Open( cFile )
      oText:=oWord:Selection()
      oFind:=oText:Find()
      for i = 1 to len( aVFields )
          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[i] )
      next
      if lDOCPreview
         oWord:Set("Visible",.t.)
      else
         oWord:PrintOut()
         oWord:Quit()
      endif
//      CursorArrow()
   else
//      MsgInfo( "Arquivo "+cFile+" nao encontrado." )
   endif
   return nil

function StringToArray( cString, cSeparator )
   LOCAL nPos 
   LOCAL aString := {} 
//   DEFAULT cSeparator := ";" 
   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

O Doc.RTF esta dentro da pasta q esta sendo executado o programa.

Sds.

Sucesso!!!

:)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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: MERGE - Colagem de dados via Command Line

Mensagem por rochinha »

Amiguinho,

Eis uma correção de peso para o código:

Código: Selecionar todos

#include "FiveWin.ch"

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

#define BS             "\"

Function OLEMerge( cDOCFile, cVFields, cVWords, lDOCPreview )
   LOCAL cHomeDir := CurDrive() + ":" + BS + CurDir() + BS
   LOCAL oDoc,oWord,oText,oFind,cFound,bError,cFile,cText
   DEFAULT lDOCPreview := .t.
   cFile := cHomeDir + cDOCFile
   aVFields := StringToArray( cVFields, ";" )
   aVWords  := StringToArray( cVWords, ";" )
   if File(cFile)
      CursorWait()
      oWord := TOleAuto():New( "Word.Application" )
      oDoc  := oWord:Get( "Documents" ) // oDoc := oWord:Documents:Open( cFile ) 
      oWord:Set("Visible",.t.)
      oDoc:Open( cFile )
      oText:=oWord:Selection()
      oFind:=oText:Find()
      for i = 1 to len( aVFields )
          oFind:Set("ClearFormatting")
          oFind:Text:=Alltrim(Upper(aVFields[i])) // "&#"+Alltrim(aVFields[i])+"#&"
          oFind:Wrap:=1
          oFind:Set("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:Set("Visible",.t.)
      else
         oWord:PrintOut()
         oWord:Quit()
      endif
      CursorArrow()
   else
      MsgInfo( "Arquivo "+cFile+" nao encontrado." )
   endif
   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
A correção ficará por conta da função UPPER() que transforma as variáveis passadas para a função, devendo é claro, deixar as variáveis dentro do arquivo .DOC/.RTF estarem em maiusculas, pois o método FIND() DO WinWord fará esta distinção.

E também pelo if oFind:Execute() no qual eu verifico se a variável foi encontrada e executo a transformação.

No código original acontecia que as variáveis, eram alteradas mesmo que fossem passadas outras informações, exemplo:

Se no .DOC/.RTF eu tivesse a variavel ROCHINHA e passasse o parametro ROXNHA a mesma seria alterada.

Não estava acontecendo a critica relativa se existia ou não a variável dentro do arquivo e a rotina de pesquisa continuava a troca mesmo sendo dados diferentes.

Quando executei o comando abaixo com o código original as variaveis foram modificadas mesmo assim:

Código: Selecionar todos

"OLEMerge arquivo.rtf '&#NOME#&;&#ADDRESS#&' 'CONTEUDO A;CONTEUDO B'" 
Mesmo a variavel ADDRESS não existindo no arquivo .DOC/.RTF o CONTEUDO B foi colado.

Com a nova alteração isto não acontecerá, portanto faça os dois testes a seguir e veja a diferença dos resultados:

Primeiro:

Código: Selecionar todos

"OLEMerge arquivo.rtf '&#NOME#&;&#ADDRESS#&' 'CONTEUDO A;CONTEUDO B'" 
Segundo:

Código: Selecionar todos

"OLEMerge arquivo.rtf '&#NOME#&;&#ENDERECO#&' 'CONTEUDO A;CONTEUDO B'" 
Se tudo correr bem, somente o segundo teste terá funcionado totalmente.
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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: MERGE - Colagem de dados via Command Line

Mensagem por fladimir »

Obrigado Rochinha pela atenção...

Durante os testes com o código sugerido e modificado ao executar o OleMerge fica parado ai eu coloquei um Altd() pra ver ele para nessa linha:

Código: Selecionar todos

oDoc  := oWord:Get( "Documents" )
O q pode ser ?

Sds.
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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: MERGE - Colagem de dados via Command Line

Mensagem por rochinha »

Amiguinho,

Se for o caso troque esta linha pelo trecho desabilitado nela mesma.

Outra coisa, seria bom verificar se as bibliotecas que vc usa para acesso a OLE estão ok. Eu ja passei por ter de testar muita coisa até encontrar a biblioteca OLE compativel a todo ocasião.

Verifique tambem se o WinWord esta sendo expulso normalmente do Gerenciador de Tarefas e não fica prendendo o documento.
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
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: MERGE - Colagem de dados via Command Line

Mensagem por fladimir »

Troquei Rochinha e deu q o argumento Open não existe...

Eu acredito q o q esta ocorrendo aki é justamente o q vc disse anteriormente acho q não estou acertando o codigo com o Harbour 2.xx q estou usando....

Compilo o PRG e linko com a lib HBWIN do Harbour.

Mas não esta funcionando direito...

Sera q funciona no Harbour 2.xx

Algum outro colega esta conseguindo usar o codigo do Rochinha??

Sds..
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 do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: MERGE - Colagem de dados via Command Line

Mensagem por fladimir »

Pessoal no Harbour 2.x não estou conseguindo utilizar a solução do tópico em questão alguém utiliza no Harbour sem a lib do Fivewin, em modo console?

Sds.
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 do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: MERGE - Colagem de dados via Command Line

Mensagem por rochinha »

Amiguinho,

O acesso a OLE não tem referencia a nenhuma lib gráfica, o processo é todo vinculado a bibliotecas do Borland em conjunto com alguma biblioteca do Harbour, HBOLE, OLE32blablabla, etc.

Veja que TOleAuto():New( "Word.Application" ) faz referencia ao objeto Winword ativo em seu S.O., ele foi testado com versões do Office até 2003, não me lembro de telo testado com Office 2007 e acho que não existe diferença.

Capture o handle da linha assim:

Código: Selecionar todos

? oWord :=TOleAuto():New( "Word.Application" )
E veja se ele te apresenta um numeral, caso sim o objeto foi chamado e ativado.

Veja que o método OPEN não é acessado diretamente, ele esta internamente ligado a DOCUMENTS que é uma sub classe do objeto principal oWord:

Código: Selecionar todos

oDoc  := oWord:Get( "Documents" ) 
oWord:Set("Visible",.f.) 
oDoc:Open( cFile ) 
Diferentemente deste trecho que acessa de forma direta voce pode ou não obter exito:

Código: Selecionar todos

    oWord:Visible := .F. //PARA NÃO VISUALIZAR O DOCUMENTO 
    oDoc := oWord:Documents:Open(cDoc_Temp)  //ABRE O WORD 
Dependendo da versão de seu Harbour voce deverá usar algum método diferente para acesso ao OLE:

Código: Selecionar todos

        oWord := GetActiveObject( "Word.Application" ) 

Código: Selecionar todos

        oWord := CreateObject( "Word.Application" ) 

Código: Selecionar todos

        oWord :=TOleAuto():New( "Word.Application" )
Para mim funcionou com Open(), mas no seu ambiente ele possa ser chamado por outro nome, OpenFile(), Openfilename(), OpenDocument(), etc.

Voce terá o árduo trabalho de encontrar a ligação correta das bibliotecas OLE necessárias, que funcione bem com esta novidade e os recursos que funcionam com OLE em seu aplicativo.
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