none
C#中调用Word通配符查找问题 RRS feed

  • 问题

  • 我想在.net中调用word的通配符查找,来实现对word文档中的内容进行模糊查找,\{YJDT?:*\}

    在word中使用上述的查找可以找到内容,但我在代码中用下面方法去查找替换

    public void ReplaceStringWildCards(string strOld, string strNew) { object _wildcards = true; _app.Selection.Find.ClearFormatting(); _app.Selection.Find.Replacement.ClearFormatting(); _app.Selection.Find.Text = strOld; _app.Selection.Find.Replacement.Text = strNew; _app.Selection.Find.MatchWildcards = true; object objReplace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll; _app.Selection.Find.Execute(ref _nullobj, ref _nullobj, ref _nullobj, ref _wildcards, ref _nullobj, ref _nullobj, ref _nullobj, ref _wrap, ref _nullobj, ref _nullobj, ref objReplace, ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj); }


     把word中的查找内容\{YJDT?:*\} 作为参数strOld传递 strNew="",执行该方法报错,

    “查找内容”文本中包含有无效的“模式匹配”表达式。

    请问是什么原因?

    • 已编辑 Sky Yen 2013年12月12日 2:50
    2013年12月12日 2:20

答案

  • 你好:

    应该还是通配符字符串有问题,可能你需要添加双反斜杠来转义那个反斜杠,然后把这个参数传递到 _app.Selection.Find.Replacement.Text 中去。

    \\{YJDT?:*\\}

    关于word中使用通配符的详细信息,请参考Office文档:

    使用通配符查找或替换文本

    如何:以编程方式在文档中搜索和替换文本

    还有一种方法就是使用正则表达式来查找。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2013年12月12日 9:19
    版主

全部回复

  • 我是建议你开启Word中“宏录制”功能—你先操作一遍然后录制宏,看生成的代码就知道问题所在了。

    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report

    2013年12月12日 2:50
    版主
  • Sub ReplaceVariable()
    '
    
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "\{YJDT?:*\}"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindAsk
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    

    Hi  ,我已经试过了 , 上面 是我录制 的宏 , 在宏中可以运行 .

    然后我试着在C#中 用下面 的代码去执行宏,提示不能运行指定宏.

      public void RunMacro(string macroName)
            {
                _app.Run(macroName, ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj, 
                    ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj, 
                    ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj,
                    ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj, ref _nullobj, 
                    ref _nullobj, ref _nullobj);
            }

    2013年12月12日 2:54
  • 2013年12月12日 3:01
    版主
  • 捕捉到 System.Runtime.InteropServices.COMException
      HelpLink=wdmain11.chm#37401
      Message=不能运行指定的宏
      Source=Microsoft Word
      ErrorCode=-2147352573
      StackTrace:
           在 Microsoft.Office.Interop.Word.ApplicationClass.Run(String MacroName, Object& varg1, Object& varg2, Object& varg3, Object& varg4, Object& varg5, Object& varg6, Object& varg7, Object& varg8, Object& varg9, Object& varg10, Object& varg11, Object& varg12, Object& varg13, Object& varg14, Object& varg15, Object& varg16, Object& varg17, Object& varg18, Object& varg19, Object& varg20, Object& varg21, Object& varg22, Object& varg23, Object& varg24, Object& varg25, Object& varg26, Object& varg27, Object& varg28, Object& varg29, Object& varg30)
           在 WordReplacement.Replace.RunMacro(String macroName) 位置 C:\Tianhua\Modules\WordReplacement\Replace.cs:行号 89
      InnerException: 

    这是执行宏的时候报的错误

    2013年12月12日 3:17
  • 捕捉到 System.Runtime.InteropServices.COMException
      HelpLink=wdmain11.chm#25040
      Message=“查找内容”文本中包含有无效的“模式匹配”表达式。
      Source=Microsoft Word
      ErrorCode=-2146822728
      StackTrace:
           在 Microsoft.Office.Interop.Word.Find.Execute(Object& FindText, Object& MatchCase, Object& MatchWholeWord, Object& MatchWildcards, Object& MatchSoundsLike, Object& MatchAllWordForms, Object& Forward, Object& Wrap, Object& Format, Object& ReplaceWith, Object& Replace, Object& MatchKashida, Object& MatchDiacritics, Object& MatchAlefHamza, Object& MatchControl)
           在 WordReplacement.Replace.ReplaceStringWildCards(String strOld, String strNew) 位置 C:\Tianhua\Modules\WordReplacement\Replace.cs:行号 79
      InnerException: 

    这是模糊查找时候报的错.

    2013年12月12日 3:24
  • 你好:

    应该还是通配符字符串有问题,可能你需要添加双反斜杠来转义那个反斜杠,然后把这个参数传递到 _app.Selection.Find.Replacement.Text 中去。

    \\{YJDT?:*\\}

    关于word中使用通配符的详细信息,请参考Office文档:

    使用通配符查找或替换文本

    如何:以编程方式在文档中搜索和替换文本

    还有一种方法就是使用正则表达式来查找。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2013年12月12日 9:19
    版主