C# VSTO 在Word中搜索文本并获取Range(结果范围)
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)//评论区有人提出应改为rang.End>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。。。
如有问题请联系QQ:
var d=["1","2","3","4","5","6","7","8","9"];
var pass=d[8]+d[6]+d[0]+d[8]+d[2]+d[0]+d[4]+d[3]+d[2];
源代码(github)包(NuGet)关注:ping9719