user1331734
user1331734

Reputation: 87

Find highlighted text

The following code finds instances of the word "Family" in a Word document. It selects and deletes the instances. The code works fine, but I want to find all instances of only highlighted words.

public void FindHighlightedText()
{
    const string filePath = "D:\\COM16_Duke Energy.doc";

    var word = new Microsoft.Office.Interop.Word.Application {Visible = true};
    var doc = word.Documents.Open(filePath);
    var range = doc.Range();

    range.Find.ClearFormatting();
    range.Find.Text = "Family";

    while (range.Find.Execute())
    {
          range.Select();
          range.Delete();
    }
    doc.Close();
    word.Quit(true, Type.Missing, Type.Missing);
}

Upvotes: 5

Views: 1058

Answers (1)

Panagiotis Kanavos
Panagiotis Kanavos

Reputation: 131661

Set the Find.Highlight property to true.

Interop uses the same objects and methods that are available to VBA macros. You can find the actions, properties you need to perform a task by recording a macro with those steps and inspecting it.

Often, but not always, the properties match the UI. If something is a property in the general Find box, it's probably a property in the Find interface as well.

For example, searching only for highlighted words produced this macro :

Selection.Find.ClearFormatting
Selection.Find.Highlight = True
With Selection.Find
    .Text = ""
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With

Which can be translated to :

range.Find.ClearFormatting();
range.Find.Highlight=1;
...
while(range.Find.Execute())
{
    ...
}

Upvotes: 2

Related Questions