Fórum Abra o WinWord em Delphi e troque Strings no Documento #142348
02/03/2003
0
Otimo exemplo para quem quer usar o Delphi para alimentar um documento escrito em Word com informações dinâmicas. Exemplo: Mala direta, contratos, propostas, etc.
uses
ComObj;
type TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);
function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var WordApp: OLEVariant;
begin
Result := False;
if not FileExists(ADocument) then begin
ShowMessage(´O Documento ´+ADocument+´ não foi encontrado!´);
Exit;
end;
try
WordApp := CreateOLEObject(´Word.Application´);
except
on E: Exception do
begin
E.Message := ´Instale o Microsoft Word!´;
raise;
end;
end;
try
WordApp.Visible := False;
WordApp.Documents.Open(ADocument);
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text := SearchString;
WordApp.Selection.Find.Replacement.Text := ReplaceString;
WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.Wrap := wdFindContinue;
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchAllWordForms := False;
if wrfReplaceAll in Flags then
WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
else
WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
WordApp.ActiveDocument.SaveAs(ADocument);
Result := True;
WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
finally
WordApp.Quit;
WordApp := Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Word_StringReplace(´C:\\temp\\Teste.doc´,´¬nome¬´,´Adenilton´,[wrfReplaceAll]);
end;
uses
ComObj;
type TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);
function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var WordApp: OLEVariant;
begin
Result := False;
if not FileExists(ADocument) then begin
ShowMessage(´O Documento ´+ADocument+´ não foi encontrado!´);
Exit;
end;
try
WordApp := CreateOLEObject(´Word.Application´);
except
on E: Exception do
begin
E.Message := ´Instale o Microsoft Word!´;
raise;
end;
end;
try
WordApp.Visible := False;
WordApp.Documents.Open(ADocument);
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text := SearchString;
WordApp.Selection.Find.Replacement.Text := ReplaceString;
WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.Wrap := wdFindContinue;
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchAllWordForms := False;
if wrfReplaceAll in Flags then
WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
else
WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
WordApp.ActiveDocument.SaveAs(ADocument);
Result := True;
WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
finally
WordApp.Quit;
WordApp := Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Word_StringReplace(´C:\\temp\\Teste.doc´,´¬nome¬´,´Adenilton´,[wrfReplaceAll]);
end;
Carnette
Curtir tópico
+ 0
Responder
Posts
29/02/2004
Czapelini
Olá Carnette,
Sua dica foi muito valiosa para mim...
Porém preciso de sua ajuda para resolver um problema semelhante:
Tenho um documento word, com várias páginas. Ele foi gerado a partir de uma mala direta.
Sendo assim, para todos os clientes tem-se um único arquivo.
Preciso, através do delphi, separar este arquivo em vários outros arquivos, ou seja, para cada cliente preciso ter um arquivo separado.
Lembrando que o número de páginas não é fixo para cada cliente, o que identifica que foi outro arquivo é o código do cliente.
Por acaso sabes como fazer isto?
Te agradeço desde já.
Valeu!
Sua dica foi muito valiosa para mim...
Porém preciso de sua ajuda para resolver um problema semelhante:
Tenho um documento word, com várias páginas. Ele foi gerado a partir de uma mala direta.
Sendo assim, para todos os clientes tem-se um único arquivo.
Preciso, através do delphi, separar este arquivo em vários outros arquivos, ou seja, para cada cliente preciso ter um arquivo separado.
Lembrando que o número de páginas não é fixo para cada cliente, o que identifica que foi outro arquivo é o código do cliente.
Por acaso sabes como fazer isto?
Te agradeço desde já.
Valeu!
Responder
Gostei + 0
13/11/2008
N_informatica
Parabens pelo exemplo funciona 110¬ mas tenho ainda uma duvida.
Como devo fazer para que seja exibido o dialogo para seleção das impressoras?
Se puder me ajudar fico grato.
Atenciosamente,
Tadeu Rodrigues de Oliveira.
Números Informática.
Como devo fazer para que seja exibido o dialogo para seleção das impressoras?
Se puder me ajudar fico grato.
Atenciosamente,
Tadeu Rodrigues de Oliveira.
Números Informática.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)