C# VSTO 在Word中搜索文本並獲取Range
C# VSTO Word 搜索 獲取 結果范圍 Range
C# VSTO Word 搜索 得到 結果范圍 Range
C# VSTO Word Find 得到 結果范圍 Range
可以通過以下方式在Word文件中找到文本:
range.Find.Execute(FindText: findText, MatchCase: true);
這里Execute()方法返回的是bool,是否找到了文本。
但是我們需要多個文字的范圍(Range)
解決方案:
/// <summary>
/// 查找所有
/// </summary>
/// <param name="range"></param>
/// <param name="findText">查找內容</param>
public static List<Range> FindAll(this Range range, string findText)
{
int start = range.Start;
int end = range.End;
List<Range> ranges = new List<Range>();
range.Find.Execute(FindText: findText, MatchCase: true);
while (range.Find.Found)
{
//搜索會改變range,這里做了一個超出范圍的判斷
if (range.Start > end)
break;
ranges.Add(range.Document.Range(range.Start, range.End));
range.Find.Execute(FindText: findText, MatchCase: true);
}
//對原來的range還原
range.SetRange(start, end);
return ranges;
}
測試:

完美,ok,
順便擴展一個方法:
/// <summary>
/// 查找第一個
/// </summary>
/// <param name="range"></param>
/// <param name="findText">查找內容</param>
/// <returns>沒有找到為空</returns>
public static Range FindFirst(this Range range, string findText)
{
int start = range.Start;
int end = range.End;
bool isOk = range.Find.Execute(FindText: findText, MatchCase: true);
if (isOk)
{
var newRange = range.Document.Range(range.Start, range.End);
range.SetRange(start, end);
return newRange;
}
else
return null;
}
非常的ok。。。
