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

posted @ 2020-12-23 14:26  爱恋的红尘  阅读(1738)  评论(2编辑  收藏  举报