Página 1 de 3

Word application

Enviado: 20 Set 2017 16:59
por leandrolinauer
Boa tarde a todos.
Verifiquei no fórum sobre editar dados de um arquivo word trocando por variáveis, e apliquei em um documento que foi necessário agora.
Até feito já está, mas não consigo é o seguinte:
1- Chamar o print dialog do word para o usuário imprimir.
2- Abrir o documento trocar todos os dados mas bloquear alteração por parte do usuário.
3- Sair do word sem salvar, para não modificar as variáveis trocadas.
Segue o código abaixo.

Código: Selecionar todos

If ( oWord := Win_olecreateobject("Word.Application") ) != nil   
      oWord:Visible := .T. //para visualizar na tela
      oWord:WindowState := 0  ///para ?? 0 normal, 1 maxmize, 2 minimize

      oDoc  := oWord:Documents:Open(carq)  
      oText := oWord:Selection()
      oFind := oText:Find()
      oFind:MatchWholeWord:=.T. //somente a palavra inteira
      oFind:Wrap:=1 //sempre no inicio
      ///busca e troca a variavel
      oFind:Text:="@COMARCA"
      oFind:Execute()
      oText:Typetext(oCOMARCA) //ocomarca é a variavel ja preenchida antes
     //.... varias trocas
     //agora a parte que não funciona.
     //COPIEI DO FORUM
     //oWord:preview()    //NAO FUNCIONA                 // visualiza o documento no preview do Word
     //oWord:Visualizar()  //NAO FUNCIONA
     //oDoc:Close(False) //NAO FUNCIONA
     //oWord:PrintOut()  //NAO FUNCIONA
     //oWord:PrintDoc(.t.)   //NAO FUNCIONA
     //oWord:PrintPreview(.T.) //NAO FUNCIONA
     //oWord:PrintPreview:=.T. //FUNCIONA, ABRE O PREVIEW DO WORD
     //oWord:Invoke("Quit",0) //NAO FUNCIONA
     //oWord:Quit(0)  //NAO FUNCIONA
      //TENTEI DE TUDO PARA:
      //ABRIR O PRINT DIALOG DO WORD para selecionar a impressora que quero enviar, tipo PDF ou uma impressora do windows
      //FECHAR O WORD logo após imprimido.
EndIf     
Fico no aguardo se alguem souber como fazer isto com o word, lembrando que as variáveis no word está alterando certinho, posso chamar manualmente a imrpressora e fechar o documento, mas pede pra salvar, isto não pode.
Grato
:xau

Word application

Enviado: 21 Set 2017 17:22
por janio
Eu sempre gero um NOVO documento a partir do original, deixando este último sempre intacto.

Tipo...
Original : contrato.doc

aí gero contrato001.doc, contrato002.doc,...contrato100.doc

janio

Word application

Enviado: 21 Set 2017 18:23
por fladimir
Eu fazia assim tb, depois migrei pro FastReport achei melhor, mas o q o FAST Faz é manter um modelo interno e fazer a partir dele, acaba dando na mesma.

Word application

Enviado: 21 Set 2017 18:56
por JoséQuintas
Ou se é fixo, então mais prático gerar em PDF.

Word application

Enviado: 21 Set 2017 21:42
por Eolo
Usando o Word, o cliente TEM que ter o Word instalado. E se não tiver?

E, se tiver, qual a garantia que tudo vai funcionar sempre em todas as versões do Word? Amanhã, o cliente instala uma versão nova do Word e pode melar a coisa. E, se isso acontecer, toca você a mexer nos fontes de novo.

Eu uso o Win32Prn() do xHarbour (sim, ainda o xHarbour, console). Abro os gets pro usuário digitar o que for preciso, monto o job no Win32Prn(), escolho fontes, cores e o tudo o que for preciso, incluo imagens com o Win32Bmp(), imprimo contratos e o que for em qualquer impressora instalada e fim de papo. Simples, sem depender do Word nem de outros.

Tenho coisa rodando sem problemas há anos.

O único problema é se o Harbour não tiver um Win32prn() nem um Win32Bmp() similares ao do xHarbour...

Word application

Enviado: 21 Set 2017 22:37
por fladimir
Grande Eolo!!!!! q bom ve-lo por aqui...

Complementando sua resposta o Harbour tem as funções equivalentes

Word application

Enviado: 21 Set 2017 23:10
por JoséQuintas
O único problema é se o Harbour não tiver um Win32prn() nem um Win32Bmp() similares ao do xHarbour...
Se não tiver a gente inventa.... rs.... mas tem.

Mas pode nem precisar disso, pode ser genérico:
teste1.png
https://github.com/JoseQuintas/JoseQuin ... recibo.prg

Ou algo mais trabalhado:
teste2.png

Word application

Enviado: 21 Set 2017 23:47
por Toledo
leandrolinauer escreveu:3- Sair do word sem salvar, para não modificar as variáveis trocadas.
O que você poderia tentar fazer é salvar o documento com outro nome.

Código: Selecionar todos

oDoc:SaveAs( "c:\temp\nomedoarquivo.doc")
Abraços,

Word application

Enviado: 22 Set 2017 08:16
por janio
Eolo,

A Win32Prn tem preview?

Fladimir,

Poderia demonstrar como seria um código de relatório com FAST e postar a imagem do relatorio pra gente ter idéia de como ficou?

Janio

Word application

Enviado: 22 Set 2017 08:59
por leandrolinauer
Bom dia a todos.
Grato pelo retorno, pelo que li nos retornos, então não há nenhuma possibilidade de fazer da forma como eu estava imaginando, mas tudo bem.
Quanto a gerar um arquivo diferente, na verdade é o que eu estou fazendo agora ele gera outro arquivo com o nome do cliente. exemplo:
ORIGINAL: Cobrança Judicial.docx
MODELO ALTERADO: Cobrança Judicial fulano de tal.docx (copiado do original e alterado as variáveis, ficando salvo)
o que eu não necessito é deixar salvo, o que vai inflando o diretório talvez, de lixo que não seria necessário guardar.

Quanto a problemas do word não funcionar em outras versões, terei que testar, mas como é software da empresa, e é eu que cuido, não me daria problemas visto que só geraria aonde tem o office instalado.

Pensei tbem em gerar em PDF, deixando o texto preso no sistema, mas aí se tiver que fazer uma alteração no texto do documento, terei que alterar o sistema, aí pensei, em fazer um documento TXT original com o texto que pode ser alterado a qualquer momento, e o sistema pega deste arquivo o texto para gerar em pdf trocando as variáveis de dados que são preenchidas pelo usuário, aí sim ficaria show, mas por enquanto isto daria trabalho demais e estou sem tempo para brincar com esta parte.

Então vou ficar com o modelo que faço agora, jogando no word e em outro arquivo copiado e deixando gravado, bom, tbem eu poderia apagar o arquivo no final da impressão, tbem é válido.
Valeu pela ajuda.
Um Harbraço a todos.
:xau

Word application

Enviado: 22 Set 2017 09:47
por fladimir

Código: Selecionar todos

		cParagrafoUnico  := 'O PRIMEIRO VENCIMENTO FICA PARA ' + dt2dig(dDtPrimeiroVcto) 
		if nPercentualDesc>0 .and. nQtdMesesDesc > 0
			cParagrafoUnico += ', SENDO QUE NOS PRIMEIROS ' + STRZERO( nQtdMesesDesc,2)
			cParagrafoUnico += '(' + Extenso2(nQtdMesesDesc, .F.) + ') ' + if( nQtdMesesDesc > 1,'MESES','MES')
			cParagrafoUnico += ' SERA CONCEDIDO UM DESCONTO DE '
			cParagrafoUnico += allstr(nPercentualDesc) + '% (' + Extenso2(nPercentualDesc, .F.) + ') POR'
			cParagrafoUnico += 'CENTO A TITULO DE PROMOCAO, RETORNANDO AO VALOR ACIMA ESTIPULADO NO '
			cParagrafoUnico += 'MES SUBSEQUENTE AO PRIMEIRO VENCIMENTO AQUI ACORDADO, OU SEJA, RETORNARA '
			cParagrafoUnico += 'AO VALOR DE R$ ' + trim(TRANSF(nValor, '@E 999,999.99')) + '(' + Extenso2(nValor)
			cParagrafoUnico += ').' 	
		endif
		cMesesContrato := Extenso2(nQtdMesesContrato, .F.)

		cDtExtenso := DataExtenso(dDtContrato)
		cDtExtenso := substr(cDtExtenso,2)

		cRazao     := alltrim(cRazao)     
		cDoc1      := alltrim(transf(cDoc1, if( cTipo=='J', "@R 99.999.999/9999-99", "@R 999.999.999-99")))
		cDoc2      := if(empty(cDoc2) .and. cTipo == 'J', 'ISENTO',;
					   		if(empty(cDoc2) .and. cTipo == 'F', '------', alltrim(cDoc2)))
		cEnd       := alltrim(cEnd)       
		cNumEnd    := alltrim(cNumEnd)    
		cBairro    := alltrim(cBairro)    
		cCidade    := alltrim(cCidade)    
		cEstado    := alltrim(cEstado)    
		cCEP       := alltrim(cCEP)       
	
		cNome   := 'Contrato' + AbreviarNome(cRazao) + GeraNome('PDF',.F.)
		cNome   := strtran(cNome, ' ','.')
		cZip    := strtran(cNome, 'PDF', 'ZIP')	   
      cTitulo := 'Contrato Cliente ' + cRazao

		*-- Gera no FAST
		oFR := frReportManager():new(NIL, cTitulo) 
	   oFR:PreviewOptions:SetZoomMode(2)  
		oFR:LoadFromResource( cNomeFR ) 
		oFR:PrepareReport()
		oFR:ShowReport()   
	   oFR:DestroyFR()

Word application

Enviado: 22 Set 2017 10:29
por Paredes01
hola
Puede por favor compartir su archivo *.fr3 (cNomeFR)
Saludos

Word application

Enviado: 22 Set 2017 11:26
por fladimir
Devido a questões internas removi alguns trechos e alterei alguns nomes, mas em suma segue pra ter ideia.
contratosistema.fr3.txt
Relatorio Fast FR3 (renomear a extensao)
(31.25 KiB) Baixado 121 vezes
contratosistema.rtf
Relatorio RTF q compoe o FR3
(81.29 KiB) Baixado 125 vezes
Atenção, o RTF (q seria o DOC com as variaveis) compõe o FR3 q após compilado fica tudo dentro do EXE não precisando nem o FR3 nem do RTF

Word application

Enviado: 22 Set 2017 20:23
por Paredes01
wow, fladimir

cómo agregar mi fr3 al EXE ?
cómo lo llamo o (lo cargo) desde mi programa ?

Saludos

Word application

Enviado: 22 Set 2017 22:50
por fladimir
tenho um arquivo .RC exemplo MeuApp.RC

Dentro dele referencio os FR3 com um ALIAS para chamar na rotina, exemplo:

Conteudo do MeuApp.RC

Código: Selecionar todos

AppIcon                      ICON         "Resources\\Icon_04.ico"
ContratoSistema          RCDATA    "C:\Projetos\Sistema\Relatorios\ContratoSistema.FR3"
Ai na rotina faço conforme postei o código:

Código: Selecionar todos

oFR:LoadFromResource( cNomeFR )  //------> onde cNomeFR aki seria    "ContratoSistema" que defini no MeuApp.RC

Ai com isto, mando somente o EXE pro cliente, no EXE tem o FR3 q por sua vez tem embutido o RTF