2009-09-21 5 views
2

Je génère des tables et les écrit à la volée à la volée. Je ne sais pas combien de tables il y aura à chaque fois que j'écrirai les données dans un mot et le problème que je rencontre est que la deuxième table est écrite à l'intérieur de la première cellule de ma première table. S'il y avait une troisième table, elle est placée dans la première cellule de ma deuxième table.Création de tables dans Word Programatically

Existe-t-il un moyen de sortir le curseur de la table? J'ai essayé de créer une nouvelle gamme avec chaque table aussi mais la même chose arrive.

J'ai également essayé des choses comme tbl.Range.InsertParagraphAfter()

Le plus proche que je suis utilisait la méthode Relocate, mais cela ne travaille pour deux tableaux.

Merci Ben

Répondre

2

J'ai eu exactement le même problème et j'ai appris que vous devez réduire la plage à la fin de la plage de tables, puis insérer un saut de ligne, redescendre et insérer votre nouvelle table. Voici un code qui utilise des tables et des signets - il est destiné à montrer comment utiliser les signets hôtes natifs vs VSTO (et ajouter un gestionnaire de clic à celui de VSTO) - mais vous pouvez simplement avoir besoin d'une partie du code à la place. Recherchez

With tbRange 
.Collapse(Direction:=Word.WdCollapseDirection.wdCollapseEnd) 
.InsertParagraphAfter() 
.Collapse(Direction:=Word.WdCollapseDirection.wdCollapseEnd).Select() 
End With 

ci-dessous - c'est ce que vous aurez besoin de désavouer table au sein de la table de nidification.

Sub Assign3TablesToNativeBookmarks() 
     'this is the native Word bookmark 
     Dim bm As Word.Bookmark 
     Dim tb As Word.Table 
     Dim tbRange As Word.Range 
     Dim i As Integer 
     For i = 1 To 3 
      bm = Me.Bookmarks.Add(Name:="nestedBookmark" & CStr(i), _ 
            Range:=ThisApplication.Selection.Range) 
      tb = bm.Range.Tables.Add(Range:=bm.Range, NumRows:=2, NumColumns:=2) 
      With tb 
       .Style = "Table Grid" 
       tbRange = .Range 
       With tbRange 
        .Collapse(Direction:=Word.WdCollapseDirection.wdCollapseEnd) 
        .InsertParagraphAfter() 
        .Collapse(Direction:=Word.WdCollapseDirection.wdCollapseEnd).Select() 
       End With 
       bm = Me.Bookmarks.Add(Name:="nestedbookmark" & CStr(i), Range:=.Range) 
      End With 
     Next 
     Dim bmMain As Word.Bookmark 
     Dim mainBookmarkRange As Word.Range 
     Dim mainBookmarkRangeStart As Integer 
     Dim mainBookmarkRangeEnd As Integer 
     mainBookmarkRangeStart = Me.Bookmarks(1).Start 
     mainBookmarkRangeEnd = Me.Bookmarks(Me.Bookmarks.Count).End 
     mainBookmarkRange = Me.Range(Start:=mainBookmarkRangeStart, End:=mainBookmarkRangeEnd) 
     bmMain = Me.Bookmarks.Add(Name:="mainBookmark", Range:=mainBookmarkRange) 
    End Sub 
    Sub Assign3TablesToHostControlBookmarks() 
     'Word host control of Bookmark 
     'bookmarks must be destroyed before resetting the object 
     'added handler 
     Dim bm As Microsoft.Office.Tools.Word.Bookmark 
     'different from the interop one 
     Dim tb As Word.Table 
     Dim tbRange As Word.Range 
     Dim i As Integer 
     For i = 1 To 3 
      bm = Me.Controls.AddBookmark(range:=ThisApplication.Selection.Range, _ 
             Name:="nestedBookmark" & CStr(i)) 
      tb = bm.Range.Tables.Add(Range:=bm.Range, NumRows:=2, NumColumns:=2) 
      With tb 
       .Style = "Table Grid" 
       tbRange = .Range 
       With tbRange 
        .Collapse(Direction:=Word.WdCollapseDirection.wdCollapseEnd) 
        .InsertParagraphAfter() 
        .Collapse(Direction:=Word.WdCollapseDirection.wdCollapseEnd).Select() 
       End With 
       bm.Delete() 
       'this deletes the bookmark before it can be recreated 
       bm = Me.Controls.AddBookmark(range:=.Range, Name:="nestedBookmark" & CStr(i)) 
       AddHandler bm.Selected, AddressOf bm_Selected 
       'handler added 
      End With 
     Next 
     Dim bmMain As Microsoft.Office.Tools.Word.Bookmark 
     Dim mainBookmarkRange As Word.Range 
     Dim mainBookmarkRangeStart As Integer 
     Dim mainBookmarkRangeEnd As Integer 
     mainBookmarkRangeStart = Me.Bookmarks(1).Start 
     mainBookmarkRangeEnd = Me.Bookmarks(Me.Bookmarks.Count).End 
     mainBookmarkRange = Me.Range(Start:=mainBookmarkRangeStart, End:=mainBookmarkRangeEnd) 
     bmMain = Me.Controls.AddBookmark(range:=mainBookmarkRange, Name:="mainBookmark") 
    End Sub 
    Private Sub bm_Selected(ByVal sender As Object, ByVal e As Microsoft.Office.Tools.Word.SelectionEventArgs) 
     MessageBox.Show("Hey, you have selected bookmark: " & sender.Name & ". " & _ 
         "You did this at " & FormatDateTime(Date.Now(), DateFormat.LongTime)) 
    End Sub 
1

La meilleure façon d'insérer des tableaux dans le mot est de générer des tables html, puis insérez ceci dans le fichier au point où votre curseur.

Il permet de créer facilement des tables imbriquées complexes de manière arbitraire sans utiliser la plupart des fonctions d'interopérabilité des mots ridiculement difficiles.

+0

J'ai déjà tout le code en place pour ajouter les tables, le problème est de déplacer le curseur hors de la table une fois qu'il a été construit. Je veux que chaque table soit séparée, non imbriquée – Ben

0

Où voulez-vous placer chaque nouvelle table? À la fin du document? Commencez votre nouvelle table à la fin de Document.Content.

+0

Sous le tableau précédent. J'ouvre un nouveau document Word, puis commence à ajouter des tables. Je voudrais juste qu'ils soient l'un sous l'autre. – Ben

Questions connexes