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。。。