2009-08-21 3 views
3

Ich bearbeite eine vb.net App für einen Partner und ein Teil der Anforderungen sind Merge-Felder von einem Word-Dokument zum anderen zu kopieren. Ich kann sie kopieren, indem ich document.content.text benutze, aber sie kommen als Text heraus (ich glaube, das habe ich gedacht).Copy Merge fIelds Von einem Word-Dokument zum anderen in VB.net

Ich glaube, ich habe sie durch Auswahl:

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

ich dann das Dokument zu aktivieren i in kopiert werden soll, und ich glaube, ich muss dann in das Dokument kopieren, das entsprechende Wort App.

Alle Hinweise würden sehr geschätzt werden ... Bin ich auf der richtigen Linie sogar?

+0

Ich muss ein ähnliches Problem lösen. Hast du eine Lösung gefunden und wenn ja, kannst du sie hier posten? –

Antwort

0

Sie können die verfügbaren Felder über die Fields Sammlung zugreifen, aber es hat alle Felder nicht nur Felder zusammenführen. Sie können Zusammenführungsfelder leicht identifizieren, müssen jedoch einige grundlegende Analysen durchführen, um den Feldnamen zu extrahieren. Der folgende Code zeigt ein messagebox mit dem Inhalt jedes fusioniert Feld in einem Dokument:

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 

Sobald Sie jede der Druckfelder gefunden haben, können Sie neue Datenfelder in dem neuen Dokument erstellen wie folgt:

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 

Hoffe, das hilft!

+0

VB.NET hat benannte und optionale Parameter, so dass Sie nie das Objekt mo_missing benötigen würden, wenn Sie mit dem Objektmodell von Word arbeiten! – CoderDennis

+0

Dies kopiert die Felder, aber nicht die Formatierung. Gibt es eine Möglichkeit, um die Formatierung um die Felder herum auch zu erhalten? Die einzige Möglichkeit, die ich bisher gefunden habe, ist das Kopieren und Einfügen durch die Zwischenablage, die langsam ist und sich falsch anfühlt. Ich habe versucht, targetApp.Selection.FormattedText = sourceRange.Code.FormattedText zu setzen, aber sie sind zur Laufzeit nicht kompatibel mit mir. – Shavais

Verwandte Themen