感谢您抽出宝贵的时间阅读此问题并思考解决方案。
我有一个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
答案 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()