将SQL数据表传递到Word模板文档中的预先设计的Word表

时间:2019-06-04 16:28:46

标签: .net vb.net templates ms-word

感谢您抽出宝贵的时间阅读此问题并思考解决方案。

我有一个Word模板(.dotx),其中包含带有两行的预定义和样式表。第一个是标题,第二个为空。它有五列。第一个数据行中的第一个单元格(不是标题)被标记为“开始”。

我有一个来自SQL的数据表,其中返回的所有数据都是一个字符串。返回的数据有五列,行数可以变化,但总是少于20

我可以在word文档中创建一个新表,但是我不想要那样。

我想做的是将数据传递到单词表,并使单词表中的行数根据需要动态增加。

我找不到在现有Word文档中标识特定表格并将数据传递给它的任何引用

我已经设法在模板中现有表的下面创建了一个表,但这不是我想要的,因为我已经设计了表

'in the btn_click event
oDT = returnDataTable(sSQL) 'oDT is defined as a DataTable
Dim iFields As Integer = oDT.Columns.Count - 1
Dim sText As String = ""
For Each oRow As DataRow In oDT.Rows
    For idx = 0 To iFields
        sText += oRow.Item(idx)
        If idx < iFields Then sText += vbTab
    Next
Next

' then :

Private Function writeToWordByRange(ByVal sText As String) As Boolean
    Dim wdApp As Word.Application
    Dim oDoc As Word.Document
    wdApp = CreateObject("Word.Application")
    oDoc = wdApp.Documents.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "PathToDocTemplate.dotx"))
    wdApp.Visible = True
    ' the next four lines are from Stackoverflow
    Dim rng As Word.Range = oDoc.Content
    rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
    rng.Text = sText
    Dim tbl As Word.Table = rng.ConvertToTable(vbTab)
    ' I added this line to see if I could pass the string to the table
    ' but it doesn't seem to take the vbTab as a delimiter but puts all the data into the first cell
    oDoc.Bookmarks.Item("Start").Range.Text = sText
    'release Word and continue
    oDoc = Nothing
    wdApp = Nothing
End Function

2 个答案:

答案 0 :(得分:1)

执行此操作的方法是从仅包含标题行的表开始。将书签放在表格后的段落中。

在表格下方插入文本,然后将其转换为表格将自动合并两个表格,实际上是将转换后的文字附加到表格中。

请注意,在我的测试中,原始表的列和附加内容未完全对齐。如果事实证明您如此,这也对我有用:

将分隔的文本内容插入文档中的其他位置,并将其转换为表格。现在复制或剪切表格并将其粘贴到书签。

我的测试代码中的相关代码段:

Set tbl = oDoc.Tables(ActiveDocument.Tables.Count)
Set rng = oDoc.content
Set rngBookmark = oDoc.Bookmarks("Start").Range
rng.Collapse wdCollapseEnd
rng.Text = sText
Set tblNew = rng.ConvertToTable(Separator:=vbTab)
tblNew.Range.Cut
rngBookmark.PasteAppendTable

答案 1 :(得分:0)

您是大师,救世主和天使!!

稍作修改就可以了。我认为您是通过VBA做到的?完全归功于您。我非常感谢。

工作代码如下:

Dim oT As Word.Table = oDoc.Tables(wdApp.ActiveDocument.Tables.Count)
Dim oRange As Word.Range = oDoc.Content
Dim bookMark As Word.Bookmark = oDoc.Bookmarks("Start")
oRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
oRange.Text = sText
Dim newT As Word.Table = oRange.ConvertToTable(Separator:=vbTab)
newT.Range.Cut()
bookMark.Range.PasteAppendTable()