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

浙公网安备 33010602011771号