Как выделить только часть абзаца Word в Visual Studio (VB) - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь экспортировать документ Word из программы Visual Basic. Разные части документа нуждаются в различном форматировании.

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

Я хочу сделать что-то вроде этого:

Dim Para1 As Word.Paragraph
Para1 = WordDoc.Content.Paragraphs.Add
Para1.Range.Start = 1
Para1.Range.End = 14
Para1.Range.Font.Bold = True
Para1.Range.Text = "Job number is: " + myJobID

... так что он выделяется жирным шрифтом от 'J' до ':' (в Para1.Range.Text), но не выделяет myJobID (это переменная, которую я получаю от пользователя). Однако, что бы я ни делал, он выделяет весь абзац, включая myJobID.

Я также пытался создать переменную Range, которая устанавливает диапазон на основе всего документа, но проблема в том, что длины нескольких переменных, которые я выводю в документе Word, будут разных размеров, и таким образом, нет никакого способа узнать, с чего начнется начало следующего раздела, который я хочу выделить жирным шрифтом. В общем, у меня есть для работы внутри объекта Paragraph, а не для перебора всех символов во всем документе.

Надеюсь, это имело смысл. Есть идеи?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Для форматирования отдельных прогонов текста при вставке необходимо разбить текст на отдельные прогоны. Кроме того, лучше всего работать с независимым Range объектом. Между командами форматирования Range необходимо «свернуть» - подумайте об этом, как о нажатии стрелки вправо (или влево) выделения, чтобы сделать его мигающим курсором. Что-то в этом роде

Dim Para1 As Word.Paragraph
Dim rng as Word.Range
Para1 = WordDoc.Content.Paragraphs.Add
rng = Para1.Range
rng.Text = "Job number is: "
rng.Font.Bold = True
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
rng.Text = myJobID
rng.Font.Bold = False
rng.Collapse Word.WdCollapseDirection.wdCollapseEnd

Если действительно необходимо вставить полный текст за один раз, то Find / Replace, чтобы найти текст, который должен быть отформатирован по-разному, является одним из способов форматирования после факта, хотя и менее эффективно.

Другая возможность - использовать функции манипуляции со строками, такие как Instr (или Contains), Left, Mid и т. Д., Чтобы определить, где в более длинной строке находится подстрока. Тогда Range.Start и Range.End могут работать с этими значениями. Но обычно , а не , лучше полагаться на значения start и end, поскольку Word может вставлять невидимые символы, которые могут отбрасывать эту нумерацию.

1 голос
/ 09 марта 2019

Создайте еще один Range объект, который охватывает только те символы, которые вы хотите выделить жирным шрифтом.

Приведенный ниже код не тестировался (на этом аппарате не настроен полный VS), но он должен дать вамидея:

Dim para1 As Word.Paragraph
Dim textToBeBolded As Word.Range

para1 = WordDoc.Content.Paragraphs.Add 'ThisDocument.Paragraphs.Add in VBA
para1.Range.Text = "Job number is: " + myJobID
para1.Range.SetRange 1, 14
textToBeBolded = para1.Range
textToBeBolded.SetRange 1, 14
textToBeBolded.Font.Bold = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...