Библиотека Word Office - результат поиска по групповым символам - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть документы MS Word 2003, которые содержат заполнители, такие как /FirstName/, /LastName/ и т. Д. Я использовал библиотеку Microsoft Office 12 для чтения файла и поиска по групповым символам с Find.Text = "/[A-Z]*/".Он отлично работает, и Find.Execute точно находит заполнитель.Но поскольку он возвращает только логическое значение, я не знаю, как получить сам заполнитель.

Подскажите, пожалуйста, как получить текст, который ищется с помощью параметра подстановки

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Я бы предложил использовать словесные закладки вместо заполнителей, потому что текст не показывается пользователю, и вы можете использовать что-нибудь из этого, чтобы автоматически вставлять текст в любое место, потому что вы можете получить диапазон конкретной закладки: *

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);
            }

        }
0 голосов
/ 17 февраля 2012

Вот мой код, для вашего интереса.Во-первых, это letter.doc файлы

Уважаемые / FirstName / / MiddleName / / LastName /:

Добро пожаловать в нашу программу.Мы стремимся предоставить вам высочайшее качество обслуживания клиентов ....

У меня также есть Dictionary<string, string> Data, в котором хранится ключ / значение для каждого заполнителя

    ...
    "/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/",...
        }
    }
...