在VB.net中将一个Word文档的合并字段复制到另一个文档

3

我正在编辑一个VB.NET应用程序,为了满足要求,需要将一个Word文档中的合并字段复制到另一个文档中。我可以使用document.content.text将它们复制过去,但它们会变成文本(我猜应该早想到这个问题了)。

我认为我已经选中了它们:

Dim tDocFields As Microsoft.Office.Interop.Word.Fields
tDocFields = tDocument.Content.Fields

我现在正在激活要复制的文档,我认为我需要使用相关的Word应用程序将内容复制到该文档中。

vDocument.Activate()
vWord.Selection. ??? Insert() ???

任何指引都将不胜感激... 我的思路正确吗?

我需要解决一个类似的问题。如果您找到了解决方案,能否在这里发布一下? - Florian Wolters
1个回答

0

您可以通过Fields集合访问可用字段,但它包含所有字段而不仅仅是合并字段。您可以轻松识别合并字段,但需要进行一些基本解析以提取字段名称。以下代码显示一个消息框,其中包含文档中每个合并字段的内容:

Dim lo_field As Field
Dim lo_range As Range
Dim lo_fieldText As String

For Each lo_field In mo_doc.Fields
    If lo_field.Type = WdFieldType.wdFieldMergeField Then

        lo_range = lo_field.Code()

        lo_fieldText = lo_range.Text
        MsgBox(lo_fieldText)

    End If
Next

一旦您找到了每个合并字段,就可以像这样在新文档中创建新的合并字段:
Imports Microsoft.Office.Interop.Word

Public Class Form1

    Dim mo_doc As Document
    Dim mo_missing As Object = System.Reflection.Missing.Value

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' Open word
        Dim lo_word As New Application
        lo_word.Visible = True

        ' Create a new word document
        mo_doc = lo_word.Documents.Add(mo_missing, mo_missing, mo_missing, mo_missing)
        mo_doc.Activate()

        ' Add a merge field
        mo_doc.Fields.Add(lo_word.Selection.Range, WdFieldType.wdFieldMergeField, "mergefieldname", True)

    End Sub
End Class

希望这能有所帮助!

VB.NET拥有命名参数和可选参数,因此在使用Word的对象模型时,您永远不需要mo_missing对象! - CoderDennis
这将复制字段,但不会复制任何格式。有没有办法同时获取字段周围的格式?到目前为止,我发现唯一的方法是通过剪贴板进行复制和粘贴,这很慢而且感觉不对。我尝试设置targetApp.Selection.FormattedText = sourceRange.Code.FormattedText,但在运行时它们是不兼容的类型。 - Shavais

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接