blueye89 Ответов: 4

Возвращает часть строки документа MS word после определенной строки


Всем привет,
У меня есть проблема, чтобы вернуть часть строки документа MS Word. Конкретная строка, которую я использую для поиска содержимого word doc, находится после ":".

Пример:
То, что я ищу, - это String1: это не то, что я хочу вернуть в VB2010.
То, что я ищу, - это String2: это не то, что я хочу вернуть в VB2010.
То, что я ищу, - это String3: Это то, что я хочу вернуть в VB2010.
То, что я ищу, - это String4: это не то, что я хочу вернуть в VB2010.
То, что я ищу, - это String5: это не то, что я хочу вернуть в VB2010.

Строка поиска: String3:

Что я уже пробовал:

Dim findText As String = "String3:"

oWord.Selection.Find.ClearFormatting()
If oWord.Selection.Find.Execute(findText) = True Then
    MessageBox.Show("Text found.")
'In the current line, how to return text after the found string?
Else
    MessageBox.Show("The text could not be located.")
End If

Любая помощь очень ценится.

Graeme_Grant

Вы ищете фразу в слове документ от VB.Net? или от слова VBA?

blueye89

Я использую VB2010.

Graeme_Grant

а вы работаете с документом Word из VB2010?

blueye89

Да!

Graeme_Grant

Пожалуйста, обновите свой вопрос, так как он был неясен. Решение 1 является примером такой путаницы.

4 Ответов

Рейтинг:
20

Graeme_Grant

Лучший способ научиться автоматизировать задачи в MS Word или MS Excel-это записать макрос, который делает то, что вы хотите достичь, а затем просмотреть сгенерированный код VBA.

Теперь вы переходите к своему коду VB2010 и выдаете те же команды, что и MS Word macro recorder, сгенерированный для вас.

[редактировать:]

Вот первая часть, сделанная для вас:

Dim TextToFind As String
TextToFind = "String3:"

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .text = TextToFind
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute
Как только вы нашли маркер, вам нужно найти начало и конец текста, с которым вы хотите работать. У меня есть код, который может показать вам, как перемещаться и выделять текст в документе Word: TryParseNumber[^] функция. Он не будет делать именно то, что вы хотите, но укажет вам правильное направление.


blueye89

Я уже пробовал, шаги есть:
1. Начните Запись
2. Ctrl+F
3. Вставьте Строку Поиска
4. Нажмите на кнопку Найти
Что Дальше? Это было сделано также с помощью приведенного выше кода. Как отправить содержимое после этого в Vb2010 MsgBox?

Graeme_Grant

Я обновил решение.

Рейтинг:
2

Patrice T

Вам нужно изучить RegEx (регулярные выражения) и использовать функцию, которая находит совпадения.
регулярное выражение, которое вам нужно, будет чем-то вроде "String3: (.+)$"

Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]

[Обновление]
Пожалуйста, проясните вопрос о том, чего вы хотите.
Написание программы, которая делает что-то в документе MSWord, и автоматизация MSWord-это две разные вещи.
Решение 2 от Graeme_Grant - это то, что вам нужно.


blueye89

Есть ли что-то проще? Я не знаком с типом кода, который вы разместили по ссылкам.

Рейтинг:
15

blueye89

Вот то, что прекрасно работает.

Public Function GetDocNoFromDoc() As String
      Dim strDocNoFromDoc As String
      Dim rng As Word.Range

      rng = WordApp.ActiveDocument.Range

      With rng.Find
          .ClearFormatting()
          .Text = "DocNo:"
          If .Execute() Then
              rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
              rng.End = rng.End + 7
              strDocNoFromDoc = rng.Text
          End If
      End With

      Return strDocNoFromDoc
  End Function


Рейтинг:
1

blueye89

Я борюсь с другой проблемой, которая, возможно, связана с этой темой. Я хотел бы найти текст, который жирный и вернуть его в текстовое поле. Есть идеи, пожалуйста?
Может быть, вернуть все символы, которые выделены жирным шрифтом?


Graeme_Grant

Что такое маркер конечного текста?

blueye89

Когда я включаю знаки абзаца.
https://s12.postimg.org/ev2qlsr65/img.png

blueye89

Я сделал это вручную, используя:
Для каждого w As Word. Range в oDoc.Слова
Если ж.шрифт.Жирный = Истина Тогда
txtEngDrwPath.Текст = w. Text
Конец, Если
Следующий

Но это возвращает мне только последнее жирное слово в строке, со всеми пробелами после этого мне не нужно.

Graeme_Grant

charmoved = Selection.EndOf(Unit:=wdParagraph, Extend:=wdExtend)

blueye89

Это не работает, потому что это для VBA. Я ищу код VB2010.