2012-01-19 5 views
0

J'ai une table principale dans un document Word.Comment copier des lignes d'une table vers une autre table dans Word 2007 en utilisant interop et C#

La première colonne de la table contient des clés. Je dois créer une autre table basée sur les clefs (rangées) choisies par l'utilisateur.

L'utilisateur peut sélectionner une touche (ligne) plusieurs fois.

Tableau 1:

TaskName Data  Group 
abc   data1  group1 
pqr   data2  group2 
lmn   data3  group3 

colonne TaskName est la colonne clé, un utilisateur peut sélectionner abc, pqr, abc, pqr, LMN

Cela devrait générer une table comme suit:

TaskName Data  Group 
abc   data1  group1 
pqr   data2  group2 
abc   data1  group1 
pqr   data2  group2 
lmn   data3  group3 

Je ne peux pas utiliser table.Cell().Range.Text car en faisant ce formatage est perdu.

+0

Lorsque vous dites que vous ne pouvez pas utiliser table.Cell(). Range.Text avez-vous le code où vous l'avez essayé et cela ne fonctionne pas. Selon MS cela peut être fait même avec le formatage. Checkout ce lien pour les débutants http://msdn.microsoft.com/en-us/library/aa537149%28v=office.11%29.aspx – MethodMan

+0

Je dois m'assurer que la mise en forme de la table principale que j'ai est reportée, Je ne pense pas que ce serait possible avec Range.Text – gizgok

+0

Avez-vous regardé le lien, ils fournissent des exemples impressionnants .. sans voir le code que vous avez ou avez essayé ..C'est un peu difficile de poster des échantillons de code car une suggestion ne voudrait pas vous mener dans le mauvais sens .. – MethodMan

Répondre

0

J'ai essayé d'abord d'utiliser Word.Selection, mais je ne pouvais pas trouver une façon de prendre une ligne à la fois et de la coller. Il pourrait être possible de faire en utilisant Word.Selection. La prochaine chose à laquelle je pensais était de copier une cellule à la fois, mais Range Property garde la structure de la cellule du tableau. J'ai regardé dans le modèle de mot et ai essayé de découvrir s'il y a une sorte de caractère de fin après chaque rangée pour le distinguer comme fin de rangée. Il y a un tel personnage mais c'est pour toutes les cellules. Pour trouver ce personnage, cliquez sur le bouton de bureau (en dehors de Accueil), cliquez sur options de mots, cliquez sur l'affichage, dans la section toujours afficher ces marques de formatage sur l'écran, cocher afficher toutes les marques de mise en forme. Cela affiche tous les caractères non imprimables dans un document Word. C'est le symbole que vous pourrez voir ¤.

Ce symbole contient les informations structurelles de la cellule et les caractères ANSI exposés sont 13 + 7. 13 est une marque de paragraphe et 7 est le marqueur de "fin de cellule". Cela contient d'autres informations qui pointent vers la gestion de la structure cellulaire dans le fichier. Dans Word 2007, ces deux caractères apparaissent comme un seul caractère, ce que nous devons faire est de supprimer ce personnage de la portée de la cellule.

J'ai créé une liste pour contenir toutes les cellules dont j'ai besoin de la table principale.

List<Microsoft.Office.Interop.Word.Cell> masterTableCells=new List<Microsoft.Office.Interop.Word.Cell>(); 

Après que le code suivant supprime le dernier caractère de la gamme

    Microsoft.Office.Interop.Word.Table table = b.Range.Tables[1]; 

       table.ID = b.Name; 
       for (int colCounter = 1; colCounter <= masterTable.Columns.Count; colCounter++) 
       { 
        Microsoft.Office.Interop.Word.Range sourceRange = masterTable.Cell(1, colCounter).Range; 
        Microsoft.Office.Interop.Word.Range targetRange = table.Cell(1, colCounter).Range; 
        object oCharacter = Microsoft.Office.Interop.Word.WdUnits.wdCharacter; 
        object negOne = -1; 
        sourceRange.MoveEnd(oCharacter, negOne); 
        targetRange.MoveEnd(oCharacter, negOne); 
        targetRange.FormattedText = sourceRange.FormattedText; 

       } 

Le but était d'obtenir du texte formaté et en supprimant le caractère de chaque plage de cellules, nous sommes en mesure d'indiquer seulement structure de la cellule particulière et non pas l'ensemble des tables.

Si vous tentez d'exécuter une boucle avec une propriété de texte uniquement mise en forme, vous obtiendrez une erreur de table corrompue. J'espère que cela t'aides.

Questions connexes