C#:在Word中搜索文本并获取结果的范围

我可以通过以下方式在Word文件中找到文本:

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

这告诉我是否找到了文本。 但我需要找到的文字片段。

你试过这个:

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

应该通过执行find来更改范围对象。

所以,你可能会使用range.Startrange.End来获得角色位置。 参考

从word使用find方法获取范围并对其进行格式化。

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

range.Find.Execute如果找到则返回true ,并将range设置为找到的范围:

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

请注意,如果range已经与查找条件匹配(在第一个range.Find.Execute ), range.Find.Execute将在范围之后搜索范围。

例如,此VBA宏将只找到第二个“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 

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