以程式設計方式在文件中搜尋和取代文字

Find 物件是 SelectionRange 物件共有的成員,您可以使用這個成員在 Microsoft Office Word 文件中搜尋文字。 取代命令是尋找命令的擴充功能。

使用 Find 物件在 Microsoft Office Word 文件中逐一搜尋特定的文字、格式或樣式,並使用 Replacement 屬性取代任何找到的項目。

適用對象:本主題資訊適用於文件層級的專案和 Word 的 VSTO 增益集專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

使用 Selection 物件

使用 Selection 物件尋找文字時,所指定的任何搜尋準則都只會套用至目前選取的文字。 如果 Selection 是插入點,則會搜尋該文件。 找到符合搜尋準則的項目時,便會自動選取該項目。

請務必注意,Find 準則是累加式的,這意味著準則會加入先前的搜尋準則。 進行搜尋前,請使用 ClearFormatting 方法清除之前搜尋的格式設定。

使用 Selection 物件尋找文字

  1. 將搜尋字串指派至變數。

    object findText = "find me";
    
  2. 清除之前搜尋的格式設定。

    Application.Selection.Find.ClearFormatting();
    
  3. 執行搜尋並顯示含有結果的訊息方塊。

    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.");
    }
    

    下列範例示範完整的方法:

    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.");
        } 
    }
    

使用 Range 物件

使用 Range 物件可讓您搜尋文字,而不必在使用者介面中顯示任何資訊。 如果找到與搜尋條件相符的文字,則 Find 物件傳回 True;如果找不到,則傳回 False。 如果找到文字,該方法還會重新定義 Range 物件以符合搜尋準則。

使用 Range 物件尋找文字

  1. 定義一個由文件第二段組成的 Range 物件。

    下列程式碼範例可用於文件層級自訂。

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

    下列程式碼範例可用於 VSTO 增益集。 本範例使用現用文件。

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. 使用 Range 物件的 Find 屬性,先清除所有現有格式化選項,然後搜尋字串 find me

    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. 在訊息方塊中顯示搜尋結果,並選取 Range 以讓它顯示。

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

    如果搜尋失敗,就會選取第二段;如果成功,就會顯示搜尋準則。

    下列範例顯示文件層級自訂的完整程式碼。 若要使用這個範例,請從專案中的 ThisDocument 類別執行程式碼。

    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(); 
    }
    

下列範例顯示 VSTO 增益集的完整程式碼。 若要使用這個範例,請從專案中的 ThisAddIn 類別執行程式碼。

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();
}

搜尋和取代文件中的文字

以下程式碼搜尋目前的選取範圍,並將所有出現的 find me 字串替換為 Found 字串。

搜尋和取代文件中的文字

  1. 請將下列範例程式碼加入專案的 ThisDocumentThisAddIn 類別。

    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);
    }
    

    Find 類別具有 ClearFormatting 方法,而 Replacement 類別也有自己的 ClearFormatting 方法。 當您執行尋找和取代作業時,必須使用兩個物件的 ClearFormatting 方法。 如果您只在 Find 物件上使用它,則可能會在取代文字中得到非預期的結果。

  2. 使用 Find 物件的 Execute 方法取代每一個找到的項目。 若要指定要取代的項目,請使用 Replace 參數。 這個參數可以是下列其中一個 WdReplace 值: