我正在尝试使用我的VB.NET代码替换word文档中的一些占位符文本。这是我正在使用的代码:
Dim oWord As Word.Application
Dim aDoc As Word.Document
'Start Word and open the document template.
oWord = CreateObject("Word.Application")
oWord.Visible = True
'Load Invoice Template From Resource File
Dim myTempFile As String = Application.UserAppDataPath & "\mytemp.docx"
My.Computer.FileSystem.WriteAllBytes(myTempFile, My.Resources.InvoiceTemp, False)
aDoc = oWord.Documents.Add(myTempFile, , , True)
oWord.Selection.Find.ClearFormatting()
oWord.Selection.Find.Replacement.ClearFormatting()
With oWord.Selection.Find
.Text = "[iOrder]"
.Replacement.Text = bwOrderID
.Forward = True
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
oWord.Selection.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll)
For Each oCtl As Word.Shape In aDoc.Shapes
If oCtl.Type = Microsoft.Office.Core.MsoShapeType.msoTextBox Then
oCtl.TextFrame.TextRange.Text.Replace("[iOrder]", bwOrderID)
End If
Next
此代码正确执行,没有错误,但在文本框中找不到“[iOrder]”。但是,如果我转到单词文件并按ctrl
+ F
进行查找和替换,则代码中指定的搜索条件就在那里,如果我单击替换,则会正确替换“[iOrder” ]“使用bwOrderID
字符串。
我一定在这里遗漏了什么?
更新1
我已将代码更新为:
For Each oCtl As Word.Shape In aDoc.Shapes
If oCtl.Type = Microsoft.Office.Core.MsoShapeType.msoTextBox Then
oCtl.TextFrame.TextRange.Text = "Invoice: " & oCtl.TextFrame.TextRange.Text.Replace("[iOrder]", bwOrderID)
End If
Next
这是正常的,但我正在丢失格式。有没有办法保持格式? “Invoice:”这个词与“[iOrder]”的颜色不同,如果可能,我非常希望保持这种颜色。
更新2
我有“查找/替换”工作,但结果是格式化问题。在查找/替换之前,文本框的格式如下:
代码:
For Each oCtl As Word.Shape In aDoc.Shapes
If oCtl.Type = Microsoft.Office.Core.MsoShapeType.msoTextBox Then
oCtl.TextFrame.TextRange.FormattedText.Text = oCtl.TextFrame.TextRange.FormattedText.Text.Replace("[iOrder]", bwOrderID)
End If
Next
这是上述代码运行后的结果:
我丢失了整个字符串的对齐方式以及已替换的[iOrder]部分的颜色。有没有办法保留这种格式?