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:
https://github.com/JoseQuintas/JoseQuin ... recibo.prg
Ou algo mais trabalhado:
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.
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.
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