EXEMPLO DE SUBSTITUIÇÃO DE DADOS DO WORD VIA DELPHI XE4
04/09/2014
0
Preciso com urgencia de um pequeno exemplo de um documento que possa ser gerado pelo delphi no word.
No word criei um documento com as variaves: @nome, @endereco, etc, salvo em c:\exemplo.docx.
Criei os edits no delphi referente a cada variável criada no word.
preciso de uma rotina que substitua as variaveis do word e abra um novo documento com os dados ja substituídos.
Por favor, me ajudem aí.
Clecio Alves
Post mais votado
15/09/2014
procedure TForm_CPR.ImprimeCarta;
var
Doc: Variant;
NomeCarta : string;
begin
try
VelhoWord:=AdiquiraOuCrieObjeto('Word.Basic');
NovoWord :=AdiquiraOuCrieObjeto('Word.Application');
// Tornar o word visivel
NovoWord.Visible := True;
// Abrir arquivo para edição
NomeCarta := ComboBoxCartas.Text;
Doc := NovoWord.Documents.Open(ExtractFilePath(Application.ExeName) + '\DataBase\Doctos\' + NomeCarta + '.doc');
// Substituir itens do arquivo por texto escolhido
Doc.Content.Find.Execute(FindText := 'wID', ReplaceWith := DBE_ID.Text);
Doc.Content.Find.Execute(FindText := 'wNOME', ReplaceWith := PrimeiraLetraMaiscula(LowerCase(DBE_NOME.Text)));
Doc.Content.Find.Execute(FindText := 'wENDERECO_MEMBRO', ReplaceWith := DBE_ENDERECO.Text);
Doc.Content.Find.Execute(FindText := 'wDATA_ANIVERSARIO', ReplaceWith := JvDBDateEditDATA_NASC.Date);
Doc.Content.Find.Execute(FindText := 'wDATA_HOJE', ReplaceWith := Date);
Doc.Content.Find.Execute(FindText := 'wESTADO_CIVIL', ReplaceWith := DBComboBoxEstadoCivil.Text);
Doc.Content.Find.Execute(FindText := 'wTRATAMENTO', ReplaceWith := DBLookupComboTratamento.Text);
Doc.Content.Find.Execute(FindText := 'wDATA_REGISTRO', ReplaceWith := JvDBDateEditDATA_BATISMO.Text);
Doc.Content.Find.Execute(FindText := 'wRG', ReplaceWith := DBE_RG.Text);
Doc.Content.Find.Execute(FindText := 'wCPF', ReplaceWith := JvDBMaskEditCPF.Text);
Doc.Content.Find.Execute(FindText := 'wCONJUGE', ReplaceWith := PrimeiraLetraMaiscula(LowerCase(DBE_NOME_CONJUGE.Text)));
//Salvar Documento
Doc.SaveAs(ExtractFilePath(Application.ExeName) + '\DataBase\Doctos\' + NomeCarta + '_Ultimo_Salvo.doc');
if Application.MessageBox('Deseja Imprimir este documento ?','Confirmação',MB_ICONQUESTION+MB_YESNO)=MRYes then
Doc.PrintOut(false);
// Fechar
NovoWord.Quit;
finally
end;
Paulo Freire
Mais Posts
03/11/2014
Clecio Alves
Por favor, preciso muito fazer esse formulário.
consegui fazer o vb.net, mas quero fazer no delphi.
Um programador experiente em delphi poderia me ajudar?
Quero fazer uma declaração, tipo: Eu, @declarante, portador da cedula de identidade nº @identidade e por aí vai...
quando clicar no botão gerar, essas variáveis criadas no word, posse substituídas pelo texto feito no delphi.
Volto a repetir, Uso o delphi 2010 e xe6, ambos não reconhecem o comando Doc.Content.Find.Execute(FindText.
Atenciosamente; Clecio
03/11/2014
Marcos Saffran
testei no meu delphi xe2 e verifiquei que deve-se inserir na uses o "WordXP".
04/11/2014
Clecio Alves
Coloquei na uses "wordxp", conforme orientação do Marcos Alfredo, mas continua sem reconhecer o comando.
Gente, eu preciso de um exemplo de apenas uma linha de substituição.
como por exemplo no word: @nome
no delphi os comandos que substitua essa variável e mostre em outro documento.
mas no delphi 2010 ou XE6 não funfa.
Ja revirei a internet de cabeça pra baixo e não encontrei.
Atenciosamente; Clécio
04/11/2014
Marcos Saffran
continua sem reconhecer o comando como? Dá erro ou fica sublinhado de vermelho? Pois no meu fica sublinhado, mas compila e executa normalmente.
var
MSWord : Variant;
begin
MSWord := CreateOleObject('Word.Application');
MSWord.Documents.Open(ExtractFilePath(Application.ExeName) + 'arquivo.docx');
MSWord.Visible := True;
MSWord.ActiveDocument.Content.Find.Execute(FindText := '<%NOMECOMPLETO%>', ReplaceWith := edNomeContratante.Text, Replace := 2);
end;
Esse é um pedaço do programa que está funcionando no XE2 com word 2010, espero que ajude.
12/11/2014
Clecio Alves
Consegui da seguinte forma:
No evento onclic do button:
var
findtext:string;
ReplaceWith:string;
Replace:string;
WApp: variant; // variável associada ao aplicativo Microsoft Word
WDoc: variant; // variável associada ao documento criado no Word
path: string;
begin
// verifica se o Microsoft Word já está aberto
if (VarIsEmpty(WApp))
then WApp := CreateOleObject('Word.Application');
path := ExtractFilePath(Application.ExeName);
// cria um documento no Word a partir do modelo do recibo
WDoc := WApp.Documents.open('C:\documentos\residencia3.dot');
WApp.Visible := True;
//Substitui os dados no word
wdoc.Content.Find.Execute(FindText := '@nome', ReplaceWith := edtnome.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@endereco', ReplaceWith := edtendereco.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@bairro', ReplaceWith := edtbairro.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@cidade', ReplaceWith := edtcidade.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@rg', ReplaceWith := edtrg.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@cpf', ReplaceWith := edtcpf.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@inquilino', ReplaceWith := edtinquilino.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@rg2', ReplaceWith := edtrg2.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@edtcpf2', ReplaceWith := edtcpf2.Text, Replace := 2);
wdoc.Content.Find.Execute(FindText := '@data', ReplaceWith := data.Text, Replace := 2);
end;
end.
Atenciosamente; Clecio
18/06/2017
Janilto Oliveira
procedure TForm_CPR.ImprimeCarta;
var
Doc: Variant;
NomeCarta : string;
begin
try
VelhoWord:=AdiquiraOuCrieObjeto('Word.Basic');
NovoWord :=AdiquiraOuCrieObjeto('Word.Application');
// Tornar o word visivel
NovoWord.Visible := True;
// Abrir arquivo para edição
NomeCarta := ComboBoxCartas.Text;
Doc := NovoWord.Documents.Open(ExtractFilePath(Application.ExeName) + '\\DataBase\\Doctos\\' + NomeCarta + '.doc');
// Substituir itens do arquivo por texto escolhido
Doc.Content.Find.Execute(FindText := 'wID', ReplaceWith := DBE_ID.Text);
Doc.Content.Find.Execute(FindText := 'wNOME', ReplaceWith := PrimeiraLetraMaiscula(LowerCase(DBE_NOME.Text)));
Doc.Content.Find.Execute(FindText := 'wENDERECO_MEMBRO', ReplaceWith := DBE_ENDERECO.Text);
Doc.Content.Find.Execute(FindText := 'wDATA_ANIVERSARIO', ReplaceWith := JvDBDateEditDATA_NASC.Date);
Doc.Content.Find.Execute(FindText := 'wDATA_HOJE', ReplaceWith := Date);
Doc.Content.Find.Execute(FindText := 'wESTADO_CIVIL', ReplaceWith := DBComboBoxEstadoCivil.Text);
Doc.Content.Find.Execute(FindText := 'wTRATAMENTO', ReplaceWith := DBLookupComboTratamento.Text);
Doc.Content.Find.Execute(FindText := 'wDATA_REGISTRO', ReplaceWith := JvDBDateEditDATA_BATISMO.Text);
Doc.Content.Find.Execute(FindText := 'wRG', ReplaceWith := DBE_RG.Text);
Doc.Content.Find.Execute(FindText := 'wCPF', ReplaceWith := JvDBMaskEditCPF.Text);
Doc.Content.Find.Execute(FindText := 'wCONJUGE', ReplaceWith := PrimeiraLetraMaiscula(LowerCase(DBE_NOME_CONJUGE.Text)));
//Salvar Documento
Doc.SaveAs(ExtractFilePath(Application.ExeName) + '\\DataBase\\Doctos\\' + NomeCarta + '_Ultimo_Salvo.doc');
if Application.MessageBox('Deseja Imprimir este documento ?','Confirmação',MB_ICONQUESTION+MB_YESNO)=MRYes then
Doc.PrintOut(false);
// Fechar
NovoWord.Quit;
finally
end;
Voce pode me dar mais detalhes de como implementar esse codigo ? to usando ele pra um software que to fazendo pra Igreja e parece ser exatamente o que preciso.
No meu projeto veja a lista do que ja fiz:
Cadastro de Usuários com level de acesso
Cadastros de Membros
Cadastro de Hierarquia Membro / Presbítero / Diácono / Pastor etc..
Cadastro de Dízimos
cadastro de Bens
Falta fazer :
Cadastro de saídas
Sistema de carteiras e crachás
Sistema de Cartas
Capturar foto com Webcam
19/06/2017
Eduardo Silva
Clecio Alves
eu procurei muito para fazer isso no Delphi Xe 7 e 8 e 10 e 10.1
e aqui funciona comigo veja se serve para você segue o exemplo
Vou dividir o código por que não cabe...
procedure TfrmConsultas.FindAndReplace; var Doc: Variant; begin Doc:= OleContainer.OleObject; // Se veio de uma nova Publicação de Cliente ou de Processos os dados do // Cliente já estão no ponteiro da tabela if vOpcaoMenu = 'PROCESSOS-Consultas' then begin DataModuleGeral.tbProcessosConsulta.Locate('NUMERO_PROCESSO',DataModuleGeral.tbProcessosNUMERO_PROCESSO.AsInteger,[]); DataModuleGeral.tbClientesConsulta.Locate('COD_CLIENTE',DataModuleGeral.tbProcessosCOD_CLIENTE.AsInteger,[]); end else if vOpcaoMenu = 'CLIENTES-Consultas' then begin DataModuleGeral.tbClientesConsulta.Locate('COD_CLIENTE',DataModuleGeral.tbClientesCOD_CLIENTE.AsInteger,[]); if dbeNumeroProcesso.Text <> '' then DataModuleGeral.tbProcessosConsulta.Locate('NUMERO_PROCESSO', dbeNumeroProcesso.Text, []); end; DataModuleGeral.tbCidadesConsulta.Locate('CEP_LOGRADOURO',DataModuleGeral.tbClientesConsultaCEP.AsString,[]); // o Bloco de Abaixo faz a troca de um Caracter no Ms Word pela palavrea que // deseja subistituir. { // Paramentos do Comando Execute. *Valor retornado Boolean Doc.Content.Find.Execute(// FindText - Opcional - Variant - O texto a ser localizado. EmptyParam, // MatchCase - Opcional - Variant - "True" para especificar que o texto da pesquisa diferencia maiúsculas de minúsculas. EmptyParam, // MatchWholeWord - Opcional - Variant - "True" para que a operação "localizar" obtenha somente palavras inteiras. EmptyParam, // MatchWildcards - Opcional - Variant - "True" para que localizar texto seja um operador especial de pesquisa. EmptyParam, // MatchSoundsLike - Opcional - Variant - "True" para que a operação de localizar obtenha palavras semelhantes ao texto de localização. EmptyParam, // MatchAllWordForms - Opcional - Variant - "True" para que a operação "localizar" obtenha todas as formas de localizar texto (por exemplo, "sentar" localiza "sentado" e "sentou"). EmptyParam, // Forward - Opcional - Variant - "True" para procurar (até o fim do documento). EmptyParam, // Wrap - Opcional - Variant - Controla o que acontece se a pesquisa começar em um ponto que não seja o início do documento e o fim do documento for atingido (ou vice-versa se o encaminhamento estiver definido como False). EmptyParam, // Format - Opcional - Variant - True para que a operação "localizar" obtenha formatação além de, ou em vez de, localizar texto. EmptyParam, // ReplaceWith - Opcional - Variant - O texto de substituição. Para excluir o texto especificado pelo argumento Find, use uma cadeia vazia (""). EmptyParam, // Replace - Opcional - Variant - Especifica quantas substituições devem ser feitas: uma, todas ou nenhuma. Pode ser qualquer constante WdReplace. EmptyParam, // MatchKashida - Opcional - Variant - "True" se as operações de localização coincidirem texto com kashidas em um documento do idioma árabe. EmptyParam, // MatchDiacritics - Opcional - Variant - "True" se as operações de localização coincidirem texto com diacrítico em um documento da direita para a esquerda. EmptyParam, // MatchAlefHamza - Opcional - Variant - "True" se as operações de localização coincidirem texto com Alef Hamzas em um documento do idioma árabe. EmptyParam, // MatchControl - Opcional - Variant - "True" se as operações de localização coincidirem texto com caracteres de controle bidirecional em um documento da direita para a esquerda. EmptyParam); }
19/06/2017
Eduardo Silva
{ Dasos do Cliente } // Nome do Cliente Doc.Content.Find.Execute('@01', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaNOME_CLIENTE.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Sexo Doc.Content.Find.Execute('@02', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaSEXO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Tipo de Pessoao (Física/Jurídica) Doc.Content.Find.Execute('@03', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaTIPO_PESSOA.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Rede / Grupo de Clientes Doc.Content.Find.Execute('@04', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaNOME_REDE_GRUPO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Endereço - Bairro Doc.Content.Find.Execute('@05', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaENDERECO.Value +' - '+ DataModuleGeral.tbClientesBAIRRO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // CEP Doc.Content.Find.Execute('@06', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaCEP.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Cidade Doc.Content.Find.Execute('@07', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbCidadesConsultaNOME_CIDADE.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Unidade Federativa Doc.Content.Find.Execute('@08', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbCidadesConsultaUF.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // DDD + Telefone 01 Doc.Content.Find.Execute('@09', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,'('+DataModuleGeral.tbClientesConsultaFONE1_DDD.Value +') '+ DataModuleGeral.tbClientesConsultaFONE1_NUMERO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // DDD + Telefone 01 Doc.Content.Find.Execute('@10', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,'('+DataModuleGeral.tbClientesConsultaFONE2_DDD.Value +') '+ DataModuleGeral.tbClientesConsultaFONE2_NUMERO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // DDD + Telefone 01 Doc.Content.Find.Execute('@11', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,'('+DataModuleGeral.tbClientesConsultaFONE3_DDD.Value +') '+ DataModuleGeral.tbClientesConsultaFONE3_NUMERO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // DDD + Telefone Fax Doc.Content.Find.Execute('@12', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,'('+DataModuleGeral.tbClientesConsultaFONE_FAX_DDD.Value +') '+ DataModuleGeral.tbClientesConsultaFONE_FAX_NUMERO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Nome do Pai do Cliente Doc.Content.Find.Execute('@13', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaNOME_PAI.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Nome da Mãe do Cliente Doc.Content.Find.Execute('@14', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaNOME_MAE.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // CPF / CNPJ Doc.Content.Find.Execute('@15', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaCPF_OU_CNPJ.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // RG / IE Doc.Content.Find.Execute('@16', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaRG_OU_INSCRICAO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // CTPS Doc.Content.Find.Execute('@17', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaCTPS_NUMERO.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // CTPS - Série Doc.Content.Find.Execute('@18', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaCTPS_SERIE.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Pis Doc.Content.Find.Execute('@19', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaPIS.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Título de Eleitor Doc.Content.Find.Execute('@20', EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,DataModuleGeral.tbClientesConsultaTITULO_ELEITOR.Value,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); if (Doc.ActiveWindow.ActivePane.View.type = 1) or (Doc.ActiveWindow.ActivePane.View.type = 2) or (Doc.ActiveWindow.ActivePane.View.type = 5) then Doc.ActiveWindow.ActivePane.View.type := 3;
Essa parte do if eu não lembro o porque pois não lembro...
Veja se serve..
Espero ter Ajudado!
19/06/2017
Eduardo Silva
Clique aqui para fazer login e interagir na Comunidade :)