2009-09-21 116 views
2

我正在生成表格並將它們寫入文字。我不知道每次將數據寫入單詞時會出現多少個表,並且我遇到的問題是第二個表寫入第一個表的第一個單元格內。如果有第三張桌子放在第二張桌子的第一個單元格內。以編程方式在Word中創建表格

有沒有辦法將光標移出表格?我曾嘗試爲每個表創建一個新的範圍,但同樣的事情發生。

我也曾嘗試之類的東西tbl.Range.InsertParagraphAfter()

我用的是Relocate方法來最接近的,但是這只是工作的兩個表。

感謝 本

回答

2

我有這個完全相同的問題,並得知您必須將範圍摺疊到表格範圍的末尾,然後插入換行符,再次摺疊,然後插入新的表格。

這裏有一些使用表和書籤的代碼 - 它是爲了展示如何使用本機和VSTO主機書籤(並添加一個單擊處理程序到VSTO) - 但您可能只需要部分代碼。尋找

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

低於 - 這就是你需要禁止table-within-table嵌套。

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

最簡單的方式插入表格到字是生成HTML表格,然後在光標所在的位置插入到文件這一點。

它允許輕鬆創建任意複雜的嵌套表,而無需使用大多數難以理解的難度字互操作函數。

+0

我已經擁有了添加表格的所有代碼,問題是將表格移動到表格外,一旦它被構建完成。我希望每個表都是獨立的,不是嵌套的 – Ben 2009-09-21 11:48:48

0

你想把每個新表放在哪裏?在文件的末尾?在Document.Content的末尾開始新表格。

+0

在前面的表下面。我打開一個新的word文檔,然後開始添加表格。我只想讓他們成爲另一個下的人。 – Ben 2009-09-21 12:51:01

相關問題