передача SQL Datatable в предварительно разработанную таблицу Word в шаблоне документа Word - PullRequest
0 голосов
/ 04 июня 2019

Спасибо, что нашли время прочитать эту проблему и обдумать решение.

У меня есть шаблон Word (.dotx), который содержит предопределенную и стилизованную таблицу с двумя строками. Первый - это заголовок, а второй - пустой. Он имеет пять столбцов. Первая ячейка в первой строке данных (не заголовок) помечена как «Пуск».

У меня есть данные из SQL, где все возвращаемые данные являются строкой. Возвращается пять столбцов данных, и количество строк может варьироваться, но всегда будет меньше 20

Я могу создать новую таблицу в документе 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 ]

1 голос
/ 04 июня 2019

Способ сделать это - начать с таблицы, в которой есть только строка заголовка. Поместите закладку в абзац сразу после таблицы.

Вставка текста под таблицей с последующим преобразованием его в таблицу автоматически объединит две таблицы, по существу добавив преобразованный текст в таблицу.

Обратите внимание, что в моем тестировании столбцы исходной таблицы и добавленного содержимого не были точно выровнены. Если это также относится к вам, это сработало и для меня:

Вставьте текстовый контент с разделителями где-нибудь еще в документе и преобразуйте его в таблицу. Теперь скопируйте или обрежьте таблицу и вставьте ее в закладку.

Соответствующий фрагмент из моего тестового кода:

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
0 голосов
/ 04 июня 2019

Ты Мастер, Спаситель и Ангел !!

С незначительной модификацией это сработало. Я думаю, что вы сделали это через 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...