• 0
Sign in to follow this  
Renato Vaz

Delphi com Word

Question

Estou terminando um sistema de cartório onde uso o Word como gerador de relatórios. Minha dúvida é como substituir uma só variável no Word por vários registros do BD.

Exemplo: Word -> [D94] Substituir por -> XXXX

YYYY

ZZZZ

Quem puder me auxiliar ficarei grato.

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
como substituir uma só variável no Word por vários registros do BD.

Isto é possivel se voce gerar um documento com extensão RTF, como DOC não vai dar

Com o arquivo .rtf pelo word voce vai usar nomes de variaveis que não poderão existir no texto do documento

exemplo: VNome, VCidade, VEnder, VBairro..etc

depois pelo delphi voce cria uma rotina para jogar o arquivo .rtf dentro de um Memo por exemplo

e em seguida outra rotina para procurar e substituir estas variaveis pelo conteudo do BD e salva o conteudo do Memo novamente como um documento com extensão .rtf

ao abrir o documento pelo word, voce vera as variaveis trocadas pelo conteudo do BD nas posições em que voce as colocou.

seria algo como foi colocado neste post

http://scriptbrasil.com.br/forum/index.php...st&p=473652

abraço

Share this post


Link to post
Share on other sites
  • 0
Com o arquivo .rtf pelo word voce vai usar nomes de variaveis que não poderão existir no texto do documento

exemplo: VNome, VCidade, VEnder, VBairro..etc

depois pelo delphi voce cria uma rotina para jogar o arquivo .rtf dentro de um Memo por exemplo

e em seguida outra rotina para procurar e substituir estas variaveis pelo conteudo do BD e salva o conteudo do Memo novamente como um documento com extensão .rtf

Renato Vaz, neste contexto, você pode dar uma olhada neste post.

como DOC não vai dar
Em termos de uso de OLE, é possível sim, desde que haja uma instalação do do Word na máquina que dele fizer uso - já usei isto há um tempo atrás.

Estou terminando um sistema de cartório onde uso o Word como gerador de relatórios. Minha dúvida é como substituir uma só variável no Word por vários registros do BD.
Vou deixar um exemplo, onde no documento do Word eu tenho dois campos de formulário, adicionados a partir da barra de ferramentas Formulários, com as seguintes configurações:

vNome - Tipo: Texto normal e Formato do texto: Iniciais maiúsculas;

vDatNasc - Tipo: Data e Formato da data: dd/MM/yyyy

Eu parti do princípio de que será lido um documento modelo e gravado em outro arquivo. Se não for o caso, basta usar Save apenas.

procedure TForm1.Button1Click(Sender: TObject);
var
  WordApp :OleVariant;

  procedure SetValue(FieldName, FieldValue :string);
  begin
    if WordApp.ActiveDocument.Bookmarks.Exists(FieldName) then
      WordApp.ActiveDocument.FormFields.Item(FieldName).Result := FieldValue;
  end;
begin
  WordApp := CreateoleObject('Word.Application');
  WordApp.Documents.Open('c:\temp\TesteVariaveis.doc');
  SetValue('vNome', 'micheus');
  SetValue('vDatNasc', '26/08/1967');
  WordApp.ActiveDocument.SaveAs('c:\temp\TesteVariaveis2.doc');
  WordApp.Quit;
end;

Abraços

Share this post


Link to post
Share on other sites
  • 0

Valeu Micheus, em tese é isto que eu quero. Só falta uma coisa. Tenho uma variável no Word e tenho, por exemplo, três registros que eu preciso substituir em uma mesma variável. Usando o arquivo tipo DOC eu já consegui. Isto é o que esta faltando.

Share this post


Link to post
Share on other sites
  • 0
Só falta uma coisa. Tenho uma variável no Word e tenho, por exemplo, três registros que eu preciso substituir em uma mesma variável. Usando o arquivo tipo DOC eu já consegui. Isto é o que esta faltando.
Renato Vaz, provavelmente o procedimento seja parecido.

Se são três registros (significam três linhas no banco), você precisará de um laço (o critério você deve saber), e sendo para substituir em uma variável do Word, então você terá que concatená-los em uma variável local e depois substituí-la na variável do Word da forma como eu exemplifiquei.

Se estes seus três registros, na verdade forem três campos (significam três colunas), então não há laço a fazer - apenas concatenação. Fique atento aos termos que usa. ;)

Abraços

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this