다음을 통해 공유


프로그래밍 방식으로 문서에서 텍스트 검색 및 바꾸기

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. 프로젝트의 ThisDocument 또는 ThisAddIn 클래스에 다음 예제 코드를 추가합니다.

    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 값 중 하나일 수 있습니다.