2013-03-05 3 views
0

MS-Word 문서에서 여러 문자열을 검색해야한다고 가정합니다. 나는 단어 api에 여러 개의 키워드를 전달하고 싶습니다. api는 MS 워드로 해당 doc 또는 docx 파일을 열고 ms 단어 파일에서 발견되면 해당 단어를 강조 표시해야합니다. 여기에 ms - word 파일의 강조 단어에 대한 샘플 코드가 있지만 찾은 루틴은 여러 단어를 강조 표시하지 않을 수 있습니다. 또 다른 문제는 파일을 강조 표시 한 다음 열 때 잘 작동하지만 ms-word를 닫으면 변경 내용을 묻는 것입니다. 나는이 루틴이 내가 원하지 않는 highligh를 만들기 위해 문서를 수정한다는 것을 이해한다. 그 루틴을 강조 표시하지만 의사 파일을 수정하지 않으려면 .... 그것을 할 수있는 방법이 있습니다. 안내해주십시오. 감사합니다여러 문자열 찾기 & MS-Word 문서에서 해당 문자열 강조 표시

using Word = Microsoft.Office.Interop.Word; 

private void btnFind_Click(object sender, EventArgs e) 
{ 
object fileName = "audi.doc"; //The filepath goes here 
string textToFind = "test1,test2,test3"; //The text to find goes here 
Word.Application word = new Word.Application(); 
Word.Document doc = new Word.Document(); 
object missing = System.Type.Missing; 
try 
{ 
    doc = word.Documents.Open(ref fileName, 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, ref missing); 
    doc.Activate(); 
    foreach (Word.Range docRange in doc.Words) 
    { 
     if(docRange.Text.Trim().Equals(textToFind, 
      StringComparison.CurrentCultureIgnoreCase)) 
     { 
      docRange.HighlightColorIndex = 
       Microsoft.Office.Interop.Word.WdColorIndex.wdDarkYellow; 
      docRange.Font.ColorIndex = 
       Microsoft.Office.Interop.Word.WdColorIndex.wdWhite; 
     } 
    } 
    System.Diagnostics.Process.Start(fileName.ToString()); 

} 
catch (Exception ex) 
{ 
    MessageBox.Show("Error : " + ex.Message); 
} 
} 

답변

0

Range.Find Property을 사용할 수 있습니다.

오픈 도큐멘트를 읽기 전용으로 아래에 코드를 작성하고 문서를 변경하지 않고 찾기 원하는 단어와 일치하는 것을 모두 선택하십시오. 여기

당신을 위해 몇 가지 코드입니다 :

private static void HighlightText() 
    { 
     object fileName = "C:\\1.doc"; 
     object textToFind = "test1"; 
     object readOnly = true; 
     Word.Application word = new Word.Application(); 
     Word.Document doc = new Word.Document(); 
     object missing = Type.Missing; 
     try 
     { 
      doc = word.Documents.Open(ref fileName, ref missing, ref readOnly, 
             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); 
      doc.Activate(); 


      object matchPhrase = false; 
      object matchCase = false; 
      object matchPrefix = false; 
      object matchSuffix = false; 
      object matchWholeWord = false; 
      object matchWildcards = false; 
      object matchSoundsLike = false; 
      object matchAllWordForms = false; 
      object matchByte = false; 
      object ignoreSpace = false; 
      object ignorePunct = false; 

      object highlightedColor = Word.WdColor.wdColorGreen; 
      object textColor = Word.WdColor.wdColorLightOrange; 

      Word.Range range = doc.Range(); 

      bool highlighted = range.Find.HitHighlight(textToFind, 
                 highlightedColor, 
                 textColor, 
                 matchCase, 
                 matchWholeWord, 
                 matchPrefix, 
                 matchSuffix, 
                 matchPhrase, 
                 matchWildcards, 
                 matchSoundsLike, 
                 matchAllWordForms, 
                 matchByte, 
                 false, 
                 false, 
                 false, 
                 false, 
                 false, 
                 ignoreSpace, 
                 ignorePunct, 
                 false); 

      System.Diagnostics.Process.Start(fileName.ToString()); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error : " + ex.Message); 
      Console.ReadKey(true); 
     } 
    } 
+0

덕분에 ... 코드가 유망 보인다. 나는이 코드를 테스트하지 않았다. 그래서이 코드는 내가 알아 내야 할 단어를 강조 할 것입니다. 이 코드는 읽기 전용 모드에서 doc이라는 단어를 열 것입니까? 그렇다면 사용자가 하이라이트해서이 파일을 열고 단어 파일을 편집하려고 시도하면 사용자가 문서 파일을 편집 할 수 있는지 여부를 알려주십시오. 제발 나를 안내 해줘. 감사합니다 – Thomas

+0

Tomas,이 코드는 단어의 모든 포함을 강조 표시합니다. 첫 번째 포함만을 강조 표시하려면 'range.Find.HitHighlight()'함수의 매개 변수를 변경하십시오. 예, 코드가 읽기 전용 모드의 doc을 열면 사용자가 문서를 편집 할 수 있습니다. – Chepene

+0

ur 코드를 실행하면 오류가 발생합니다. 오류가 range.find.highlight() 함수에서 발생하고 오류 메시지가 "잘못된 변수 유형 (HRESULT의 예외 : 0x80020008 (DISP_E_BADVARTYPE))"이므로 ur 코드를보고 수정해야하는 내용을 알려주십시오. 오류. 덕분에 – Thomas

관련 문제