zoukankan      html  css  js  c++  java
  • 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。。。

  • 相关阅读:
    Spring之调度器(Scheduler)
    Spring之拦截器(Interceptor)
    ThreadLocal相关
    hibernate操作数据库
    文件操作的工具类
    日期操作工具类
    有关mysql的utf8和utf8mb4,以及Illegal mix of collations for operation 'like'
    [原]nginx 一下快一下慢的问题
    再谈微信公众号网页授权的40163错误
    用DBCC CHECK修复SQL2000的数据库一致性问题
  • 原文地址:https://www.cnblogs.com/ping9719/p/14178430.html
Copyright © 2011-2022 走看看