Rotina substituir strings no Word - Alguém me ajuda?

Delphi

15/10/2003

Caros Companheiros....
Vejam se podem me ajudar....

Tenho uma rotina que faz o seguinte... Substitui determinadas palavras em um documento Word, pelo conteudo de campos de uma tabela.

A Rotina funciona perfeitamente quando preciso fazer as substituições no documento Word, para apenas um registro da tabela.

Como tenho um modelo de notificação de cobrança padrão, feito no word, eu preciso ir alterando o nome e os meses dos debitos dentro do documento word.

O loop na tabela fica assim: (está funcionando perfeitamente)

While not dtmDados.tblDebitoAtivoPeriodo.Eof Do
Begin
Cursor := crHourGlass;
Word := CreateOleObject(´Word.Application´);
Word.Visible := False;
Contrato := Word.Documents;
Doc := Contrato.Open(C:\Prl\Imagens\Notifica.Doc´); //
Doc.Content.Find.Execute(FindText := ´<<Nome_Empresa>>´, ReplaceWith := dtmDados.tblDebitoAtivoPeriodoNome.AsString);
Doc.Content.Find.Execute(FindText := ´<<Meses_Debito>>´, ReplaceWith := dtmDados.tblDebitoAtivoPeriodoMesesDebitantes.AsString);
Doc.SaveAs(´C:\Prl\Imagens\Impressao.doc´); // Salva com outro nome para não solicitar salvação e não sobrepor o modelo
Doc.PrintOut(False);
Word.Quit;
Cursor := crDefault;
DeleteFile(´C:\Prl\Imagens\Impressao.doc´);

dtmDados.tblDebitoAtivoPeriodo.Next;
End;
dtmDados.tblDebitoAtivoPeriodo.IndexFieldNames := ´Codigo´;
Showmessage(´Notificações Impressas com sucesso!´);




Companheiros... A rotina está funcionando perfeitamente mas gostaria de programar a mesma de forma que eu não precise ficar dando todos os comandos de criação, abertura e estruturacao para que o word susbstitua as strings desejadas.

Da forma como está a rotina está muito lenta. Por exemplo se eu tiver 300 registros na tabela o word será aaberto e fechado 300 vezes.

Gostaria de trabalhar melhor este loop.

Se alguém puder me ajudar ficarei muito grato.
Um grande abraço a todos.
Pablo - Marília/SP


Pablo_lima

Pablo_lima

Curtidas 0

Respostas

Phibis

Phibis

15/10/2003

colega andei trabalhando em algo parecido e acho que para melhorar a velocidade, experimente tirar as três primeiras linhas de dentro da estrutura de repetição.

Cursor := crHourGlass;
Word := CreateOleObject(´Word.Application´);
Word.Visible := False;

pois desta forma acredito que você estará criando uma aplicação Word apenas e inserindo varios documentos word, mas aplicação será aberta apenas uma vez.

ficando assim:

O loop na tabela fica assim: (está funcionando perfeitamente)

Cursor := crHourGlass;
Word := CreateOleObject(´Word.Application´);
Word.Visible := False;

While not dtmDados.tblDebitoAtivoPeriodo.Eof Do
Begin
Contrato := Word.Documents;
Doc := Contrato.Open(C:\Prl\Imagens\Notifica.Doc´); //
Doc.Content.Find.Execute(FindText := ´<<Nome_Empresa>>´, ReplaceWith := dtmDados.tblDebitoAtivoPeriodoNome.AsString);
Doc.Content.Find.Execute(FindText := ´<<Meses_Debito>>´, ReplaceWith := dtmDados.tblDebitoAtivoPeriodoMesesDebitantes.AsString);
Doc.SaveAs(´C:\Prl\Imagens\Impressao.doc´); // Salva com outro nome para não solicitar salvação e não sobrepor o modelo
Doc.PrintOut(False);
Word.Quit;
Cursor := crDefault;
DeleteFile(´C:\Prl\Imagens\Impressao.doc´);

dtmDados.tblDebitoAtivoPeriodo.Next;
End;
dtmDados.tblDebitoAtivoPeriodo.IndexFieldNames := ´Codigo´;
Showmessage(´Notificações Impressas com sucesso!´);


GOSTEI 0
Beppe

Beppe

15/10/2003

Eu penso que Word.Quit deveria estar após o loop e em seu lugar Doc.Close.

Ataliba


GOSTEI 0
POSTAR