2009-08-21 5 views
3

Je suis en train de modifier une application vb.net pour un partenaire et une partie des exigences sont de copier des champs de fusion d'un document Word à un autre. Je peux les copier en utilisant document.content.text mais ils sortent sous forme de texte (je devrais avoir compris cela je suppose).Copier Fusionner des champs d'un document Word à un autre dans VB.net

Je pense que je les ai sélectionnés par:

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

Je suis ensuite activer le doc je veux copier dans et je pense que je dois copier ensuite dans ce document en utilisant l'application de mots connexes.

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

Les pointeurs serait grandement apprécié ... Je suis sur la bonne voie même?

+0

J'ai besoin de résoudre un problème similaire. Avez-vous trouvé une solution et si oui, pouvez-vous l'afficher ici? –

Répondre

0

Vous pouvez accéder aux champs disponibles via la collection Fields mais il contient tous les champs et pas seulement les champs de fusion. Vous pouvez facilement identifier les champs de fusion, mais vous devrez effectuer une analyse basique pour extraire le nom du champ. Le code suivant montre un MessageBox avec le contenu de chaque champ de fusion dans un document:

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 

Une fois que vous avez trouvé chacun des champs de fusion vous pouvez créer de nouveaux champs de fusion dans le nouveau document comme ceci:

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 

Espérons que cela aide!

+0

VB.NET possède des paramètres nommés et optionnels, donc vous n'avez jamais besoin de l'objet mo_missing lorsque vous travaillez avec le modèle objet de Word! – CoderDennis

+0

Ceci copie les champs, mais pas le formatage. Y a-t-il un moyen d'obtenir le formatage autour des champs aussi? Le seul moyen que j'ai trouvé pour le faire jusqu'ici est de copier et coller à travers le presse-papier qui est lent et se sent mal. J'ai essayé de définir targetApp.Selection.FormattedText = sourceRange.Code.FormattedText mais ce sont des types incompatibles pour moi au moment de l'exécution. – Shavais

Questions connexes