2010-10-25 30 views
10

Tôi có thể tìm thấy một văn bản trong một tập tin Word qua:C#: Tìm kiếm một văn bản trong Word và nhận được nhiều kết quả

Word.Range range = wordApp.ActiveDocument.Content; 
Word.Find find = range.Find; 
find.Text = "xxx"; 
find.ClearFormatting(); 
find.Execute(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); 

này nói với tôi nếu văn bản được tìm thấy. Nhưng tôi cần phạm vi của mảnh văn bản tìm thấy.

+0

Trước đó trong mã: đối tượng riêng bị thiếu = Type.Missing; – simon

+0

Không chắc chắn về bạn/cô gái, nhưng lúc đầu tôi thấy API này hơi khó hiểu. Tôi mong đợi 'range.Find.Execute (..)' trả về một đối tượng phạm vi mới thay vì thay đổi một đối tượng ở gốc ('Document.Content'). –

Trả lời

3

Đối tượng dải ô phải được thay đổi bằng cách thực hiện tìm trên đó.

Vì vậy, bạn có thể sử dụng range.Startrange.End để nhận các vị trí ký tự. Reference

8

Các bạn đã thử này:

range.Find.Execute(
     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); 


while (range.Find.Found) 
{ 
    //Get selected index. 
    // Do as you please with range... 
    //Positions: range.Start... range.End 
    //search again 
    range.Find.Execute(
     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); 
} 
+1

Bạn nói trong mã của mình "// Nhận chỉ mục đã chọn". Bạn có thể viết mã ở đây không? Bạn đang giả sử mọi người biết cách lấy chỉ mục đã chọn. –

2

Gets một loạt từ từ bằng phương pháp tìm và định dạng nó.

//Parameter contains what you want to find. 
_wordApp.Selection.Find.Execute(title); 

Word.Range range = _wordApp.Selection.Range; 
if (range.Text.Contains(title)) 
{ 
    //gets desired range here it gets last character to make superscript in range 
    Word.Range temprange = _document.Range(range.End - 1, range.End);   
    temprange.Select(); 
    Word.Selection currentSelection = _wordApp.Selection; 
    currentSelection.Font.Superscript = 1; 
} 
2

range.Find.Execute lợi nhuận true nếu tìm thấy, và đặt range đến phạm vi tìm thấy:

var range = doc.Range(); 
while (range.Find.Execute("xxx")) 
    Debug.Print(range.Text); 

Lưu ý rằng range.Find.Execute sẽ tìm kiếm phạm vi sau range nếu range đã là một trận đấu cho Tìm điều kiện (sau khi đầu tiên range.Find.Execute).

Ví dụ, Macro VBA này chắc chắn sẽ chỉ có thứ hai "b":

Sub Macro1() 
    ActiveDocument.Range.Text = "abba" 
    Dim r As Range 
    Set r = ActiveDocument.Range(1, 2) ' the first "b" 
    Debug.Print r.Start; r.End  ' prints " 1 2 " 

    Debug.Print r.Find.Execute("b") ' prints "True" 
    Debug.Print r.Start; r.End  ' prints " 2 3 " 

    Debug.Print r.Find.Execute("b") ' prints "False" (if r.Find.Wrap = wdFindStop) 
    Debug.Print r.Start; r.End  ' prints " 2 3 " 
End Sub 
-2

Microsoft.Office.Interop.Word.WdReplace.wdReplaceOne;

Các vấn đề liên quan