Integração Delphi Word

Delphi

Banco de Dados

05/07/2017

Pessoal eu esou tenho um problema com a emissão dos documentos. acontece que eu gostaria de deixar o usuario livre para confeccionar o documento e para isso adicionei o seguinte codigo ao botao de chamada do documento do word:
 


var  WordApp: variant; { variável do Word }
    Document: variant; { documento do Word }
        path: string;
begin
{ inicia o Word, caso já não esteja rodando }
  if VarIsEmpty(WordApp)
     then WordApp := CreateOleObject('Word.Application');
  path := ExtractFilePath(Application.ExeName);
  Document := WordApp.Documents.Open(path + 'Cartas\\CARTA_ANIVERSÁRIO.doc');
  WordApp.Visible := True;

{ Move os dados da tabela para o documento do word. }
  Document.FormFields.Item('Nome').Result :=
    ADOTbCartas.FieldbyName('Nome').AsString;
  Document.FormFields.Item('CPF').Result :=
    ADOTbCartas.FieldbyName('CPF').AsString;
 // Document.FormFields.Item('RG').Result :=
 //   ADOTbCartas.FieldbyName('RG').AsString;
 // Document.FormFields.Item('Email').Result :=
 //   ADOTbCartas.FieldbyName('Email').AsString;
end;




O problema é que se esse campo referente ao CPF por exemplo nao estiver presente no documento da uma mensagem de erro na emissão do documento:
>>>> Omembro solicitado da coleção nao existe. <<<<
CLIQUE AQUI E VEJA A IMAGEM DO ERRO mesmo emite o documento . Eu gostaria de deixar os campos a serem inseridos no documento a gosto do cliente ( usuario do programa ) sem que essa mensagem seja vista pelo usuario.

Agradeço a contribuição de todos!
Janilto Oliveira

Janilto Oliveira

Curtidas 0

Melhor post

Wesley Yamazack

Wesley Yamazack

06/07/2017

Opa Janiltojack, blz?

Então, eu faço um pouco diferente de você, inclusive há um tempo eu fiz um artigo aqui para a DevMedia mesmo. Q tal?


www.devmedia.com.br/passar-parametros-para-word-a-partir-do-delphi-dica/15723


Desta forma não temos esse problema que você mencionou, q tal dar uma olhada?

Grande abraço
GOSTEI 2

Mais Respostas

Emerson Nascimento

Emerson Nascimento

05/07/2017

e se tentar algo como:

if Document.FormFields.Item(''Nome'') <> nil then
Document.FormFields.Item(''Nome'').Result :=
ADOTbCartas.FieldbyName(''Nome'').AsString;Document.FormFields.Item(''Nome'').Result := ADOTbCartas.FieldbyName(''Nome'').AsString;

if Document.FormFields.Item(''CPF'') <> nil
Document.FormFields.Item(''CPF'').Result :=
ADOTbCartas.FieldbyName(''CPF'').AsString;Document.FormFields.Item(''CPF'').Result := ADOTbCartas.FieldbyName(''CPF'').AsString;

não sei a comparação correta seria com nil. não tenho o Delphi agora para efetuar testes.
GOSTEI 0
Janilto Oliveira

Janilto Oliveira

05/07/2017

Opa Janiltojack, blz?

Então, eu faço um pouco diferente de você, inclusive há um tempo eu fiz um artigo aqui para a DevMedia mesmo. Q tal?


www.devmedia.com.br/passar-parametros-para-word-a-partir-do-delphi-dica/15723


Desta forma não temos esse problema que você mencionou, q tal dar uma olhada?

Grande abraço


Estive olhando este artigo e gostei dele so nao tenti implementar ainda mas vou fazer uma tentativa com ele, nao tenho muto conhecimento em programação ainda mas to indo caminhando sem parar kkkk. Obrigado por se interessar em ajudar. Farei um teste !
GOSTEI 0
Janilto Oliveira

Janilto Oliveira

05/07/2017

Boa tarde, Wesley Yamazack
Voce consegue postar pra mim um projeto exemplo somente dessa parte de cartas pode ser com apena um campo de tabela por exemplo um documento do word e a form completa ( unit) com substituição apenas de nome . Mas preciso saber como gerar esses dados para a substituição por exemplo a origem dos dados e como envia-los pro documento. Tenho visto que algums campos no Word sao do tipo ex: @NOME outros #NOME ou wNOME e eu sou inciante bem newbie mesmo ainda nao entendi como fazer devido a minha inesperiencia mesmo kkkk . Obrigado

Pessoal eu citei o nome do Wesley Yamazack mas vou ser grato a todos que me ajudarem com a duvida e ajuda
GOSTEI 1
POSTAR