Programmgesteuertes Suchen und Ersetzen von Text in Dokumenten

Das Find-Objekt ist ein Element des Selection- und des Range-Objekts, und Sie können eines dieser Objekte verwenden, um in Microsoft Office Word-Dokumenten nach Text zu suchen. Der Befehl "Ersetzen" ist eine Erweiterung des Befehls "Suchen".

Verwenden Sie ein Find-Objekt, um ein Microsoft Office Word-Dokument in einer Schleife zu durchlaufen und nach bestimmtem Text, einer Formatierung oder einem Stil zu suchen. Verwenden Sie die Eigenschaft Replacement, um gefundene Elemente zu ersetzen.

Gilt für: Die Informationen in diesem Thema gelten für Projekte auf Dokumentebene und VSTO-Add-In-Projekte für Word. Weitere Informationen finden Sie unter features available by Office-App lication and project type.

Verwenden eines Selection-Objekts

Wenn Sie ein Selection-Objekt zum Suchen nach Text verwenden, gelten die von Ihnen angegebenen Suchkriterien nur für den zurzeit markierten Text. Wenn die Selection eine Einfügemarke ist, wird das Dokument durchsucht. Wenn ein Element gefunden wird, das mit die Suchkriterien übereinstimmt, wird es automatisch ausgewählt.

Sie müssen unbedingt beachten, dass die Find-Kriterien kumulativ sind. Dies bedeutet, dass Kriterien früheren Suchkriterien hinzugefügt werden. Deaktivieren Sie alle Formatierungen aus vorherigen Suchvorgängen mithilfe der Methode ClearFormatting, bevor Sie den Suchvorgang ausführen.

So suchen mit einem Selection-Objekt nach Text

  1. Weisen Sie einer Variablen eine Suchzeichenfolge zu.

    object findText = "find me";
    
  2. Löschen Sie die Formatierung aus vorherigen Suchvorgängen.

    Application.Selection.Find.ClearFormatting();
    
  3. Führen Sie die Suche aus, und zeigen Sie ein Meldungsfeld mit den Ergebnissen an.

    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    }
    

    Das folgende Beispiel zeigt die vollständige -Methode.

    private void SelectionFind() 
    { 
        object findText = "find me";
    
        Application.Selection.Find.ClearFormatting();
    
        if (Application.Selection.Find.Execute(ref findText,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
            ref missing, ref missing)) 
        { 
            MessageBox.Show("Text found.");
        } 
        else
        { 
            MessageBox.Show("The text could not be located.");
        } 
    }
    

Verwenden eines Range-Objekts

Mit einem Range-Objekt können Sie nach Text suchen, ohne dass eine Anzeige in der Benutzeroberfläche erfolgt. Das Find Objekt gibt True zurück, wenn Text gefunden wird, der den Suchkriterien entspricht, und False, wenn dies nicht der Fall ist. Es definiert außerdem das Range-Objekt so neu, dass es den Suchkriterien entspricht, wenn der Text gefunden wird.

So suchen Sie mithilfe eines Range-Objekts nach Text

  1. Definieren Sie ein Range-Objekt, das aus dem zweiten Absatz im Dokuments besteht.

    Das folgende Codebeispiel kann in einer Anpassung auf Dokumentebene verwendet werden.

    Word.Range rng = this.Paragraphs[2].Range;
    

    Das folgende Codebeispiel kann in einem VSTO-Add-In verwendet werden. In diesem Beispiel wird das aktive Dokument verwendet.

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. Wenn Sie die Find Eigenschaft des Range Objekts verwenden, löschen Sie zunächst alle vorhandenen Formatierungsoptionen, und suchen Sie dann nach der gesuchten Zeichenfolge.

    rng.Find.ClearFormatting();
    
    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    {
    
  3. Zeigen Sie die Ergebnisse der Suche in einem Meldungsfeld an, und wählen Sie den Range aus, um sie sichtbar zu machen.

        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 
    
    rng.Select();
    

    Wenn bei der Suche ein Fehler auftritt, wird der zweite Absatz ausgewählt. Wenn die Suche erfolgreich ist, werden die Suchkriterien angezeigt.

    Das folgende Beispiel zeigt den vollständigen Code für eine Anpassung auf Dokumentebene. Wenn Sie dieses Beispiel verwenden möchten, führen Sie den Code von der ThisDocument -Klasse im Projekt aus.

    private void RangeFind() 
    { 
        object findText = "find me";
    
        Word.Range rng = this.Paragraphs[2].Range; 
    
        rng.Find.ClearFormatting();
    
        if (rng.Find.Execute(ref findText,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
            ref missing, ref missing)) 
        { 
            MessageBox.Show("Text found.");
        } 
        else 
        { 
            MessageBox.Show("Text not found.");
        } 
    
        rng.Select(); 
    }
    

Das folgende Beispiel zeigt den vollständigen Code für ein VSTO-Add-In. Wenn Sie dieses Beispiel verwenden möchten, führen Sie den Code von der ThisAddIn -Klasse im Projekt aus.

private void RangeFind()
{
    object findText = "find me";

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing))
    {
        MessageBox.Show("Text found.");
    }
    else
    {
        MessageBox.Show("Text not found.");
    }

    rng.Select();
}

Suchen und Ersetzen von Text in Dokumenten

Mit dem folgenden Code wird die aktuelle Auswahl durchsucht und alle Vorkommen der Zeichenfolge durch die gefundene Zeichenfolge ersetzt.The following code searches the current selection and replaces all of the occurrences of the string find me with the string Found.

So suchen Sie nach Text und ersetzen Text in Dokumenten

  1. Fügen Sie den folgenden Beispielcode der Klasse ThisDocument oder ThisAddIn im Projekt hinzu.

    private void SearchReplace()
    {
        Word.Find findObject = Application.Selection.Find;
        findObject.ClearFormatting();
        findObject.Text = "find me";
        findObject.Replacement.ClearFormatting();
        findObject.Replacement.Text = "Found";
    
        object replaceAll = Word.WdReplace.wdReplaceAll;
        findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing,
            ref replaceAll, ref missing, ref missing, ref missing, ref missing);
    }
    

    Die Klasse Find verfügt über eine Methode ClearFormatting, und die Klasse Replacement verfügt ebenfalls über eine eigene Methode ClearFormatting. Wenn Sie Such- und Ersetzungsvorgänge ausführen, müssen Sie die ClearFormatting-Methode beider Objekte verwenden. Wenn Sie nur das Find-Objekt verwenden, erhalten Sie ggf. unerwartete Ergebnisse im Ersetzungstext.

  2. Verwenden Sie die Methode Execute des Find-Objekts, um jedes gefundene Element zu ersetzen. Verwenden Sie den Replace-Parameter , um anzugeben, welche Elemente ersetzt werden sollen. Dieser Parameter kann einen der folgenden WdReplace-Werte aufweisen: