Alterar documento no Word
Senhores,
Estou montando uma aplicação para abrir um contrato no Word e alterar os dados segundo um registro selecionado no cadastro de cliente. Para isso eu gostaria de saber qual é o comando que eu posso adicionar um texto no documento e também alterar algumas propriedades como Negrito, Itálico e margem para parágrafo.
Agradeço desde já pela ajuda,
Estou montando uma aplicação para abrir um contrato no Word e alterar os dados segundo um registro selecionado no cadastro de cliente. Para isso eu gostaria de saber qual é o comando que eu posso adicionar um texto no documento e também alterar algumas propriedades como Negrito, Itálico e margem para parágrafo.
Agradeço desde já pela ajuda,
Chmeireles
Curtidas 0
Respostas
Marco Salles
14/06/2005
Amigo , se voce quiser inicializar sobre este tópico
leia isto:
quanto a substituição o aroldo zanela ja enviou várias vezes codigo com macro substituição.. Infelismente eu não consegui localiza-los em meu Banco de Dados...
Mas se voce persquisar aquimesmo no forum , pelo título de Substituição Macro Word , e autor Aroldo Zanela , ira encontrar vasta documentação que talves lçhe seja util
leia isto:
Manipular Word através de Linha de Comando
Bom, estou aqui mais uma vez para escrever sobre algo simples e legal de se aprender, como manipular algumas funções básicas do Microsoft Word através de um mini-aplicativo Delphi.
Dá para fazer coisas interessantes, isso sem usar os componentes da palheta Servers, ainda estou ´fuçando´ nestes componentes para um melhor aproveitamento, mas por enquanto vamos a prática utilizando algumas linhas de comando.
Criei um mini-aplicativo que é a coisa mais fácil do mundo e ao mesmo tempo muito útil de se usar, eu queria poder imprimir alguns dados direto para impressora sem usar programas de terceiros, existe alguns comandos para se enviar diretamente de um componente Tmemo e até outros direto para a impressora, só que eu estava apanhando na hora de formatar o texto, queria que tivesse parágrafos, negrito, sublinhado e etc. Então pensei, porque não utilizar o Word, pois sempre que se inicia um novo documento, já está pré-configurado algumas coisas, tipo de fonte, tamanho e etc... sem contar que não existe ninguém com um pouco de conhecimento em computadores no mundo que não conheça o software do ´Tio Bill´!
A idéia era importar dados de um TEdit, algumas informações básicas além da data para um formato específico e mandar imprimir com opção de caso queira realizar alguma alteração, fosse possível, então pesquisei e encontrei alguns exemplos, peguei um pouco de cada dica e montei a minha própria.
A idéia deste artigo é ensinar a criar um documento novo no word, exibí-lo, formatar o alinhamento do parágrafo, tamanho, estilo e tipo de fonte, imprimir, salvar e fechar o mesmo. Então para ter uma idéia do que é possível fazer, criei um pequeno índice com os comandos possíveis:
Mudar o Tamanho da Fonte: MSWord.FontSize(24);
Mudar a Fonte Usada: MSWord.Font(´Arial´);
Colocar Itálico: MSWord.italic;
Retirar o Itálico: MSWord.italic(false);
Colocar Negrito: MSWord.bold;
Retirar Negrito: MSWord.bold(false);
Colocar Sublinhado: MSWord.underline;
Retirar Sublinhado: MSWord.underline(false);
Alinhamento Justificado: MSWord.JustifyPara;
Alinhamento a Direita: MSWord.RightPara;
Alinhamento a Esquerda: MSWord.LeftPara;
Alinhamento ao Centro: MSWord.CenterPara;
Quebrar página: MSWord.InsertPageBreak;
Salvar o Arquivo: MSWord.FileSaveAs(´c:\temp\test.txt´, 3);
Imprimir o Arquivo: MsWord.FilePrint;
Seleciona uma parte do texto: MSWord.LineUp(2, 1);
Monta uma tabela com o texto selecionado: MSWord.TextToTable(ConvertFrom := 2, NumColumns := 1);
Fechar Word 1: MsWord.Quit;
Fechar Word 2: MsWord.Close;
Em tempo: MSWord é uma variável do tipo variant, pode ser declarada global como local, recomendo que seja declarada global para não ter dores de cabeça.
Vamos a um exemplo prático:
Primeiro declare uma variável global para guardar as informações e manipular os comandos do WORD, o nome da variável pode ser qualquer um, desde que seja do tipo Variant, neste exemplo eu coloquei o nome de MSWord, e não esqueça de adicionar no Uses ComObj.
Var
MSWord: Variant;
Agora insira um botão e coloque o seguinte comando no evento OnClick:
Begin
MSWord:= CreateOleObject (´Word.Basic´); //cria o objeto
MSWord.AppShow; //mostra o word
MSWord.FileNew; //inicia um novo documento
MSWord.FontSize(24); //muda o tamanho da fonte
MSWord.italic; //coloca italico
MSWord.bold; //coloca negrito
MSWord.underline; //sublina
MSWord.CenterPara; //alinha ao centro
MSWord.insert(´Active Delphi´); //Escreve algo
MSWord.FontSize(12); //muda o tamanho da fonte
MSWord.Font(´Arial´); //muda a fonte usada
MSWord.underline(false); //retira o sublinhado
MSWord.italic(false); //retira o italico
MSWord.bold(false); //retira o bold
MSWord.LeftPara; //alinha a esquerda
MSWord.insert(#13+´O Site do programador´);//Pula uma linha e escreve
MSWord.LeftPara; //alinha a esquerda
MSWord.insert(13+9 +´Comandos do Word´);//nova linha e um TAB
MSWord.LineUp(2, 1); //seleciona uma parte do texto
MSWord.TextToTable(ConvertFrom := 2, NumColumns := 1);// monta uma tabela com o texto selecionado
MSWord.FileSaveAs(´c:\temp\test.txt´, 3); //Salva o arquivo
end;
Este comando que pode ser facilmente entendido, servirá para criar um documento no Word, escrever algo, alinha, muda o estilo da fonte como também o tamanho sendo que pode-se mandar o conteúdo de um Tedit ou outro componente que suporte texto como também uma variável string, já viu as possibilidades?. No final já salva com um nome específico; pode também determinar o nome do arquivo na hora de salvar utilizando um TsaveDialog:
// Salvar personalizado o arquivo
if SaveDialog1.Execute then
MSWord.SaveAs (WideString (SaveDialog1.Filename), 0);
MSWord.SaveAs (FileName := WideString (SaveDialog1.Filename),
FileFormat := 0, //formato nativo do word
SaveNativePictureFormat := 1); // true
end;
Além disso, pode-se também imprimir o conteúdo com apenas um clique, adicione um novo botão e no evento onclick digite o seguinte comando:
begin
MsWord.FilePrint;
End;
Obs. Lembre-se, a variável tem que ser global e o arquivo criado recentemente no Word precisa ainda estar aberto para que o comando MsWord.FilePrint consiga ser executado sem problemas.
Ele irá imprimir direto utilizando a impressora padrão do sistema, legal né, mas não é só isso, dá para fechar também o documento utilizando uma função bem fácil:
begin
PostMessage(FindWindow(nil, ´Microsoft Word – Documento1´), WM_CLOSE,0,0);
end;
Esta função fecha qualquer programa apenas pelo nome, caso esteja utilizando o Word2000 ou superior, coloque ´Documento1 – Microsoft Word´ mas lembre-se, se você mandar salvar o documento do Word verifique o nome que utilizou para poder mandar fechar.
Como estamos trabalhando com um mini-aplicativo para trabalhar em conjunto com o Word, ele deverá estar sempre visível, utilize o comando abaixo sempre que executar alguma ação:
begin
SetForegroundWindow(handle);
End;
Para mandar o seu aplicativo sempre para frente dos outros programas em execução e definir aposição do form na tela, utilize também as funções de Form.Top e Form.Left para definir a posição do form em tempo de execução, garanto que dá pra fazer programas simples mas muito poderosos.
Alguns devem até pensar´ para que isso?, utilizar o Word se o princípio da programação é a criação e não a cópia...Se formos pensar desta forma, eu poderia mudar de linguagem e ir para o VB ou utilizar o próprio Acces pois já que é da família Microsoft Office eu estaria em casa e não teria tantas dificuldades, mas como eu mesmo disse a respeito do princípio da programação, devemos criar, aperfeiçoar e se adaptar a novas e velhas tecnologias já existentes, tem um artigo no site a respeito de como apagar um arquivo e enviá-lo para lixeira, então eu te pergunto, já que eu quero apagar o arquivo para que isso também? Ele não estaria copiando a idéia de outros? Não, ele criou um mecanismo muito utilizado no Windows, só que para o nosso ambiente de desenvolvimento.
Imagina termos que utilizar o QuickReport para imprimir uma lista de chamada? dependendo dos dados que deseja imprimir você irá deixar seu programa muito mais enxuto e leve de executar utilizando esta opção de manipular o Word, imagine se você tem uma base de dados contendo nome de clientes e deseja criar uma lista de chamada, pode-se localizar todos pela data de nascimento, mandar para um TlistBox e mandar gerar uma tabela no word, a partir do momento que exportar os dados para o Word, o usuário estará com mil e uma possibilidades.
Valeu galera e até a próxima, espero ter ajudado mais uma vez e quero aproveitar para agradecer ao pessoal do site pela revista. ´Obrigadão´ mesmo, gostei muito da revista.
quanto a substituição o aroldo zanela ja enviou várias vezes codigo com macro substituição.. Infelismente eu não consegui localiza-los em meu Banco de Dados...
Mas se voce persquisar aquimesmo no forum , pelo título de Substituição Macro Word , e autor Aroldo Zanela , ira encontrar vasta documentação que talves lçhe seja util
GOSTEI 0
Chmeireles
14/06/2005
Legal esse artigo.
Acontece que eu já tenho um rotina montada com o uso da Paleta Servers e esse artigo está usando um tipo de varíavel Variant. Eu não sei usar esse tipos de recursos.
Eu que eu preciso somente descobrir uma maneira para inserir um texto em ponto específico do documento e também formatá-lo, usando a paleta servers.
Agradeço desde já pela ajuda,
Acontece que eu já tenho um rotina montada com o uso da Paleta Servers e esse artigo está usando um tipo de varíavel Variant. Eu não sei usar esse tipos de recursos.
Eu que eu preciso somente descobrir uma maneira para inserir um texto em ponto específico do documento e também formatá-lo, usando a paleta servers.
Agradeço desde já pela ajuda,
GOSTEI 0
Marco Salles
14/06/2005
Eu que eu preciso somente descobrir uma maneira para inserir um texto em ponto específico do documento
Voce localizou os tópicos que eu lhe sugeri
quanto a substituição o aroldo zanela ja enviou várias vezes codigo com macro substituição
isto não lhe serveira :?: :?: :?:
GOSTEI 0
Chmeireles
14/06/2005
Acontece, que nesse artigo está falando de alterações de texto com Word.Basic, só que estou usando a paleta servers, eu não sei se ela é tão boa, por isso, preciso de um opinião sua. Vc acha que seria melhor usar Word.Basic com o CreateOleObject do que usar a paleta Servers?
Eu posso deixar usar a paleta servers, porém preciso saber como fazer certas operações, tipo substituir texto, adicionar textos, eliminar textos. Tem algum outro lugar onde posso encontrar comandos? Por favor, me ajude, estou precisando muito.
Agradeço desde já pela sua ajuda,
Eu posso deixar usar a paleta servers, porém preciso saber como fazer certas operações, tipo substituir texto, adicionar textos, eliminar textos. Tem algum outro lugar onde posso encontrar comandos? Por favor, me ajude, estou precisando muito.
Agradeço desde já pela sua ajuda,
GOSTEI 0
Marco Salles
14/06/2005
Amigo Carlos , eu nun to entendendo... Sobre o artigo , voce ja deu sua opinião... Eu não estou mais falando do Artigo...
A outra sugestão que eu lhe dei foi encontrar as dicas passadas pelo amigo Aroldo Zanela , sobre esse asunto..
Voce consegui localizar esses tópicos que eu lhe passei, ou não os encontrou , ou ja os encontrou e não lhe foi útil :?: :?: :?:
Mas se voce persquisar aquimesmo no forum , pelo título de Substituição Macro Word , e autor Aroldo Zanela , ira encontrar vasta documentação que talves lçhe seja util
quanto a substituição o aroldo zanela ja enviou várias vezes codigo com macro substituição
A outra sugestão que eu lhe dei foi encontrar as dicas passadas pelo amigo Aroldo Zanela , sobre esse asunto..
Voce consegui localizar esses tópicos que eu lhe passei, ou não os encontrou , ou ja os encontrou e não lhe foi útil :?: :?: :?:
GOSTEI 0