How to replace text in a Word document #136

Here's how to use OLE automation for MS Word and replace some text string in any document:

use ActiveX, ComObj;

const 
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;

var 
  WordApp: Variant;

begin
  // create OLE object for MS Word application:
  WordApp := CreateOLEObject('Word.Application');
  // load a document from your file
  WordApp.Documents.Open(yourDocFileName);
  WordApp.Selection.Find.ClearFormatting;
  WordApp.Selection.Find.Text := yourStringForSearch;
  WordApp.Selection.Find.Replacement.Text := yourNewStringForReplace;
  WordApp.Selection.Find.Forward := True;
  WordApp.Selection.Find.MatchAllWordForms := False;
  WordApp.Selection.Find.MatchCase := Flase;
  WordApp.Selection.Find.MatchWildcards := False;
  WordApp.Selection.Find.MatchSoundsLike := False;
  WordApp.Selection.Find.MatchWholeWord := False;
  WordApp.Selection.Find.MatchFuzzy := False;
  WordApp.Selection.Find.Wrap := wdFindContinue; 
  WordApp.Selection.Find.Format := False;
  
  WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
end;

To replace the first occurence of your text only use:

WordApp.Selection.Find.Execute(Replace := wdReplaceOne);

Instead of:

WordApp.Selection.Find.Execute(Replace := wdReplaceAll)

To check if text was found then use the Found method:

if WordApp.Selection.Find.Found then
  {do something}

Save the modified document with:

WordApp.ActiveDocument.SaveAs(yourDocFileName);

Finally, close the MS Word instance with:

WordApp.ActiveDocument.Close;
WordApp.Quit;
WordApp := Unassigned;
Note
If you want to change a font instead of text, use the Font property of WordApp.Selection.Find.Replacement instead of Text.
Author: Shlomo Abuisak
Contributor: Shlomo Abuisak
Added: 2009/11/05
Last updated: 2009/11/05