Abra o WinWord em Delphi e troque Strings no Documento
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
Curtidas 0
Respostas
Czapelini
02/03/2003
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!
GOSTEI 0
N_informatica
02/03/2003
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.
GOSTEI 0