Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Office Word Library-通过通配符搜索的结果_C#_Regex_Com_Ms Word_Ms Office - Fatal编程技术网

C# Office Word Library-通过通配符搜索的结果

C# Office Word Library-通过通配符搜索的结果,c#,regex,com,ms-word,ms-office,C#,Regex,Com,Ms Word,Ms Office,我有一个MS Word 2003文档,其中包含占位符,如/FirstName/,/LastName/等。。。我使用Microsoft Office 12库读取该文件,并使用Find.Text=“/[A-Z]*/”通过通配符进行搜索。它工作正常,Find.Execute会准确地找到占位符。但是因为它只返回布尔值,我不知道如何获取占位符本身 您能告诉我如何获取通过通配符选项搜索的文本吗?我建议使用word书签而不是占位符,因为文本不会显示给用户,您可以使用此功能在任何地方自动插入文本,因为您可以获取

我有一个MS Word 2003文档,其中包含占位符,如
/FirstName/,/LastName/
等。。。我使用Microsoft Office 12库读取该文件,并使用
Find.Text=“/[A-Z]*/”
通过通配符进行搜索。它工作正常,
Find.Execute
会准确地找到占位符。但是因为它只返回布尔值,我不知道如何获取占位符本身


您能告诉我如何获取通过通配符选项搜索的文本吗?

我建议使用word书签而不是占位符,因为文本不会显示给用户,您可以使用此功能在任何地方自动插入文本,因为您可以获取特定书签的范围:

protected void insertTextAt(string bookmarkName, string text,
            bool useDefaults = true, string fontName = "Arial", 
            int fontSize = 11, int bold = 0,bool newLine = true)
        {
            try
            {
                Object oBookMarkName = bookmarkName;
                WordInterop.Range wRng =
                    this.wDoc.Bookmarks.get_Item(ref oBookMarkName).Range;
                wRng.Text = text;
                if (!useDefaults)
                {
                    wRng.Font.Bold = bold;
                    wRng.Font.Name = fontName;
                    wRng.Font.Size = fontSize;
                }
                if (newLine)
                {
                    wRng.Text += "\r\n";
                }
                wRng.Font.Bold = 0;
            }
            catch (Exception e)
            {
                String exceptionString = String.Format("Bookmark {0} could not"
                +" be found in template {1}",bookmarkName,this.template);
                throw new Exception(exceptionString,e);
            }

        }

这是我的代码,出于您的兴趣。 首先,这是
letter.doc
文件

亲爱的/FirstName//MiddleName//LastName/:

欢迎收看我们的节目。我们致力于为您提供最优质的服务 客户服务质量

我还有一个
字典数据
,它存储每个占位符的键/值

    ...
    "/FirstName/" : "read from database"
    "/MiddleName/" : "read from database"
    "/LastName/" : "read from database"
    ...
我有一个方法可以读取.doc文件并替换占位符:

    oWordApp = new MSWord.ApplicationClass();
    doc = oWordApp.Documents.Open(ref fileName,
                                                    ref missing, ref readOnly,
                                                    ref missing, ref missing, ref missing,
                                                    ref missing, ref missing, ref missing,
                                                    ref missing, ref missing, ref isVisible,
                                                    ref missing, ref missing, ref missing);
    doc.Activate();
    doc.Select();

    oWordApp.Selection.Find.ClearFormatting();
    oWordApp.Selection.Find.MatchWildcards = true;
    oWordApp.Selection.Find.Wrap = MSWord.WdFindWrap.wdFindContinue;
    oWordApp.Selection.Find.Text = "/[A-Z]*/";

    bool isFound = true;
    while(isFound == true) {
        isFound = oWordApp.Selection.Find.Execute(ref missing, ref missing, ref missing,
                                                    ref missing, ref missing, ref missing, ref missing,
                                                    ref missing, ref missing, ref missing, ref missing,
                                                    ref missing, ref missing, ref missing, ref missing);

        if( isFound == true ) {
            //use the database to do the replacing
            //how to get the placeholder itself, such as "/FirstName/", "/LastName/",...
        }
    }

请提供有关方法的资料。请同时提供您正在使用的代码。显示您的代码将有助于解决问题。我将代码张贴在下面,与现有程序共享文档。如果我将占位符更改为书签,可能会导致旧程序无法正常运行。顺便说一句,谢谢你,你不必把占位符改成书签,你只要把整个占位符标记成书签,文本就会被自动覆盖,这样你就有了向后兼容性。如果您坚持只使用占位符,请尝试以下
Application.Selection.Find.Replacement.Text=“Find”和这个