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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM