VB.NET替换word文档中的文本,包括TextBox

时间:2016-11-16 13:46:26

标签: vb.net ms-word

我正在尝试使用我的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

我有“查找/替换”工作,但结果是格式化问题。在查找/替换之前,文本框的格式如下:

Before Code Runs

代码:

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

这是上述代码运行后的结果:

After Code Runs

我丢失了整个字符串的对齐方式以及已替换的[iOrder]部分的颜色。有没有办法保留这种格式?

0 个答案:

没有答案