Vb.net 如何在Visual Studio(VB)中仅加粗部分文字段落

Vb.net 如何在Visual Studio(VB)中仅加粗部分文字段落,vb.net,ms-word,Vb.net,Ms Word,我正在尝试从Visual Basic程序导出Word文档。文档的不同部分需要不同的格式 我有几个段落,我只需要在每个段落中加粗一部分。我试图在每个段落中设置需要加粗的范围,但无论我做什么,它似乎只想加粗整个段落 我想这样做: Dim Para1 As Word.Paragraph Para1 = WordDoc.Content.Paragraphs.Add Para1.Range.Start = 1 Para1.Range.End = 14 Para1.Range.Font.Bold = Tru

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

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

我想这样做:

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

我还尝试创建一个范围变量,该变量根据整个文档设置一个范围,但问题是,我在Word文档上输出的几个变量的长度将是不同的大小,因此无法知道下一节粗体的开始位置。所以基本上,我必须在段落对象中工作,而不是遍历整个文档中的所有字符


希望这是有道理的。有什么想法吗?

创建另一个
范围
对象,该对象仅包含要加粗的字符

下面的代码未经测试(此机器上未设置完整的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

为了格式化单独的文本运行,插入时必须将文本分解为单独的运行。此外,最好使用独立的
范围
对象。在格式化命令之间,
范围
需要“折叠”-将其想象为按下选择的右(或左)箭头使其成为闪烁的光标。类似这样的东西

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
(或
包含
)、
等,以确定子字符串在较长字符串中的位置。然后
Range.Start
Range.End
可以使用这些值。但一般来说,最好不要依赖于
开始
结束
值,因为Word可以插入不可见的字符,这可能会导致此编号错误。

如果这样做,则会引发错误消息。我做不到:textToBeBolded=Para1.Range(1,14),当然我在一个新的范围内声明了它:Dim textToBeBolded As Word.Range我也没有SetRange。除了Word对象库之外,还有其他库我应该引用吗?什么错误消息?如前所述,我无法测试代码本身,但创建一个单独的子范围,然后将字体修饰符应用于该子范围的概念是这里的重要概念。
SetRange
是从
range
对象调用的方法:在空段落上设置粗体属性,然后添加文本。换一种方式做。例如添加段落,添加文本,设置子范围,然后最终对子范围应用格式。不过,我在其他地方有一个拼写错误。我认为这是可行的,但我必须处理一些其他内容。从@JohnA poster的评论复制到错误答案:谢谢回复。不幸的是,当我尝试这一点时,什么都没有显示-整行甚至都没有打印。我认为你放错了引号,因为如果我按字面意思尝试你的代码,它会按字面意思在单词doc上打印出三行完整的代码(基本上,代码的第5-8行)。所以我在“工作ID是”后面加了一个引号。另外,你需要在Word.wdcollapsedidirection.wdCollapseEnd周围加上括号。谢谢你的更正@JohnA-我当时正在移动设备上打字,不在我的头顶上。。。抱歉搞混了!我已经对答案中的代码进行了更改。