Pu sh данные из Excel в документ Word - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь преобразовать sh данные Excel в текстовый документ. Словесный документ - это уже существующий документ, который необходимо заполнить значениями и идентификаторами лотов. У меня есть текстовый документ, настроенный так, что все места, требующие заполнения данных из Excel, являются элементами управления Rich Content. Я вставил элемент управления Rich Content Control в каждое место в документе, которое необходимо заполнить.

[! [Введите здесь описание изображения] [1]] [1] Данные Excel

Вставлено только 10 строки для образцов данных.

[! [введите здесь описание изображения] [2]] [2]

Документ Word. Элементы управления расширенным содержимым в столбце «Вес» и «Партия»

Я хочу sh перенести sh «веса» из таблицы Excel в столбец «вес» в слове document и pu sh «массовая партия» из электронной таблицы Excel в столбец «lot» текстового документа.

Sub PushDatatoWord()
  'Declare the appropriate variables
  Dim wordApp As Word.Application
  Dim wDoc As Word.Document
  Dim r As Integer

'Create a link to the microsoft word application
  Set wordApp = CreateObject("word.application")
'Create variable of the word document
Set wDoc = wordApp.Documents.Open("Worddoc.docx")
wordApp.Visible = True
r = 2

For i = 1 To 20
    wDoc.ContentControls(i).Range.Text = Sheets("Boxes_Push").Cells(r, 3)
    r = r + 1
Next i

wordApp.Documents.Close
wordApp.Quit

End Sub

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

ИЗМЕНИТЬ В ОРИГИНАЛЬНОЕ ЗАПИСЬ:

[! [Рабочий лист Excel с диапазоном от B2 , C15] [3]] [3]

[! [Документ Word с именованными элементами управления содержимым] [4]] [4]

'1. Name all content controls on word document. weight1, weight2, weight3, etc. lot1, lot2, lot3, etc.
'2. Create a 2d array with the values and lot . Read range values to arrary.
'3. Use SelectContentControlsByTitle() in a foreach loop with the array created.


Sub dataToWord()

    Dim wordApp As Word.Application
    Dim wDoc As Word.Document
    Dim r As Long
    Dim arr As Variant
        
    'create connection to the word application
    
    Set wordApp = CreateObject("word.application")
    
    'Set the word document, content controls named weight1, weight2, etc and lot1, lot2, etc
    
    Set wDoc = wordApp.Documents.Open("C:\Users\tyler.masson\Desktop\PushToWord\testpush_withnames.docx")
    wordApp.Visible = True
    r = 2
 
    'range created on worksheet from cells B2,C15 called "range"
    arr = Range("range").Value
    For Each i In arr
        wDoc.SelectContentControlsByTitle(Weight).Range.Text = Sheets("testpush").Cells(r, 2)
        r = r + 1
        
    Next i
    
   
    wordApp.Documents.Close
    wordApp.Quit


End Sub

У меня проблемы с каждый л oop. Я не совсем уверен, как l oop через каждый элемент управления содержимым по заголовку (вес и партия?), А затем назначать значения в созданном массиве этим элементам управления содержимым.

Я очень признателен за помощь по этот. [1]: https://i.stack.imgur.com/Nb4e8.png [2]: https://i.stack.imgur.com/tsvaM.png [3]: https://i.stack.imgur.com/eyNuj.png [4]: ​​https://i.stack.imgur.com/E6G0c.png

1 Ответ

1 голос
/ 22 июня 2020

Примерно так должно работать:

Sub dataToWord()

    Dim wordApp As Word.Application
    Dim wDoc As Word.document, tbl As Word.Table
    Dim r As Long, c As Long, maxRows As Long, i As Long
    Dim arr As Variant
        
'    Set wordApp = CreateObject("word.application")
'    Set wDoc = wordApp.Documents.Open("C:\Users\tyler.masson\Desktop\PushToWord\testpush_withnames.docx")
'    wordApp.Visible = True
    
    'using an already-open doc for testing
    Set wordApp = GetObject(, "word.application")
    Set wDoc = wordApp.activeDocument
    
    Set tbl = wDoc.Tables(1) 'assuming just one table

    r = 2
    c = 2
    maxRows = 10 'how many rows in the first set of columns
                 '  before we need to move over to the next set?

    'maxRows = tbl.Rows.Count - 1 'dynamic count
    
    'range created on worksheet from cells B2,C15 called "range"
    arr = Range("range").Value
    For i = LBound(arr, 1) To UBound(arr, 1)
        'put the values directly in the cells
        tbl.Cell(r, c).Range.Text = arr(i, 1)
        tbl.Cell(r, c + 2).Range.Text = arr(i, 2)
        
        'time to switch to next column?
        If i = maxRows Then
            c = c + 5
            r = 2
        Else
            r = r + 1
        End If
        
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...