EXEMPLO DE SUBSTITUIÇÃO DE DADOS DO WORD VIA DELPHI XE4

04/09/2014

0

Bom dia.
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

Clecio Alves

Responder

Post mais votado

15/09/2014

Achei esse código, ve se serve pra ti.




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

Paulo Freire
Responder

Mais Posts

03/11/2014

Clecio Alves

Uso o delphi 2010 e xe6, ambos não reconhecem o comando Doc.Content.Find.Execute(FindText.
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
Responder

03/11/2014

Marcos Saffran

Bom dia Clecio,

testei no meu delphi xe2 e verifiquei que deve-se inserir na uses o "WordXP".
Responder

03/11/2014

Deivison Melo

Conseguiu evoluir com as orientações passadas?
Responder

04/11/2014

Clecio Alves

Ainda nao consegui.
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
Responder

04/11/2014

Marcos Saffran

Bom dia Clecio,

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.
Responder

12/11/2014

Clecio Alves

Quero agradecer a todos que me ajudaram nessa dúvida.
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
Responder

18/06/2017

Janilto Oliveira

Achei esse código, ve se serve pra ti.




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
Responder

19/06/2017

Eduardo Silva

Boa tarde!
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);
}
Responder

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!
Responder

19/06/2017

Eduardo Silva

Tem coisas a mais no Código mais você vera logo o que é interessante para você
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar