如何在Visual Studio(VB)中加粗Word段落的一部分

时间:2019-03-08 21:55:03

标签: vb.net ms-word

我正在尝试从Visual Basic程序中导出Word文档。文档的不同部分将需要不同的格式。

我有几个段落,我只需要将每个段落的部分加粗。我试图在每个段落中设置需要加粗的范围,但是无论我做什么,它似乎都只想加粗 entire 段落。

我想做这样的事情:

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 个答案:

答案 0 :(得分:1)

创建另一个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

答案 1 :(得分:1)

为了格式化单个文本行,必须在插入时将文本分解为单个行。另外,最好使用独立的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

如果确实有必要一口气插入全文,则查找/替换以定位应采用不同格式的文本是事后格式化的一种方法,尽管效率较低。

另一种可能性是使用字符串操纵函数,例如Instr(或Contains),LeftMid等,以确定子字符串在较长的字符串中的何处位于。然后Range.StartRange.End可以使用这些值。但是通常最好不要使用startend的值,因为Word可以插入不可见的字符,从而使该编号失效。