Bom dia Pessoal estou com um problema em minha empresa e gostaria de saber se alguem teria alguma solução para isso o departamento de cadastro tem que emitir para várias pessoas cartas onde algumas informações saem do sistema então gostaria de desenvolver um programa onde o mesmo tenha um texto fixo e em alguns locais houvesse a possibilidade deu preencher com informações extraidas do meu sistema existe essa possibilidade? Alguem tem um modelo de programa para eu me basear?
Bom Dia !! Meu caro, você poderia fazer uma Matriz e Usar a Função REPLACE do Word via Comando Progress. Escreveria todo o texto, e onde fosse variável colocaria um Carácter Especial onde seria substituído pela valor contido no seu banco. Código: DEFINE VARIABLE AppWord AS COM-HANDLE NO-UNDO. CREATE "Word.Application" AppWord. AppWord:visible = false. AppWord:Documents:Open("N:\Progress\Apps\Expwin\Matriz.doc",False,False,False,"","",False). AppWord:Selection:Find:Text = "#Variavel1". AppWord:Selection:Find:Replacement:Text = Bancodedados.Campo1. AppWord:Selection:Find:Forward = True. AppWord:Selection:Collapse. AppWord:Selection:Find:Execute(,,,,,,,,,,2,,,,). AppWord:Selection:Find:Text = "#Variavel2". AppWord:Selection:Find:Replacement:Text = Bancodedados.Campo2. AppWord:Selection:Find:Forward = True. AppWord:Selection:Collapse. AppWord:Selection:Find:Execute(,,,,,,,,,,2,,,,). /* E Assim você faz quantos Replaces for preciso AppWord:Selection:Find:Text = "#Variavel3....". AppWord:Selection:Find:Replacement:Text = POde por do banco.. de uma variável declarada aqui.. . AppWord:Selection:Find:Forward = True. AppWord:Selection:Collapse. AppWord:Selection:Find:Execute(,,,,,,,,,,2,,,,). */ /*Salva como.. no seu caso.. salva uma com cada nome */ /* delcara uma variavel vFile e Diz que vFile = seu destino tipo C:\Temp\... depois diz que vFile = vFile + Banco.NomedoCliente + ".doc" Appword:ActiveDocument:SaveAs(vfile). */ Appword:ActiveDocument:SaveAs("C:\Tempo\Carta" + STRING(TIME) + ".doc"). /* Appword:ActiveDocument:SaveAs("N:\Progress\Ficha_Palletes\Ultima_Ficha" + STRING(vPallete) + ".doc"). Meu exemplo.. a variável vPallete é sempre incrementada.. então ele gera vários documentos de acordo com esta variável */ /* Appword:ActivePrinter = "Bullzip". Appword:PrintOut(). Aqui imprime numa impressora pdf DOS SILENT CONTADOR 10. Por algum motivo precisei colocar um contador... só um executável pra contar 1s , porque sem este contador.... não abria o arquivo gerado... mas acredito ser algo com a impressora pdf */ Appword:ActiveDocument:Close. Appword:Quit(false). release object appWord. A Função iria substituir no documento, onde teria #Variavel1 por no caso um campo do seu banco que você informasse. Dai você teria a matriz aberta, substituído os valores e fechada sendo feito uma cópia com outro nome e mantida a matriz da forma original, pronta pra próxima carta, tendo os caracteres especiais para serem substituídas pelos valores do seu banco. Espero ter Ajudado!! Eriuton Charles
Eriuton Charles, boa noite, Você apresentou ao nosso colega uma solução muito bacana, de código muito claro e que será útil para muitos outros colegas. Vou manter em meus registros, porque estamos sempre precisando. Obrigado! Abraço, Cruz
Olá bom dia !! Opa !!! Não sei se deu certo para o amigo stormfire, mas é simples e fácil de funcionar. Muito Útil quando precisamos desenhar uma matriz, pois assim podemos fazer tudo como queremos com a facilidade de usar todas as ferramentas que o Office oferece e depois só substituir os valores via comando e utilizando do banco de dados e de variáveis resultante de cálculos, sendo que este tanto podem ser substituídos como também escritos. Para escrever eh só posicionar o Cursor Código: AppWord:Selection:MoveDown. ou Código: Appword:Selection:TypeParagraph. formatar e escrever Código: Appword:Selection:Font:Size = 12. Appword:Selection:Font:Name = "Arial Narrow" . Appword:Selection:Font:Bold = true. AppWord:SELECTION:TypeText("OLÁ MUNDO !!"). No exemplo que dei, ele cria o documento, salva como e fecha a aplicação fazendo tudo no modo invisível, porém se quiser deixar aberto logo o documento é só usar o AppWord:visible = true. e retirar lá o close e o quit. Código: AppWord:visible = true. Um Grande Abraço!