Как создать отформатированный отчет Word из многострочной / столбцовой электронной таблицы Excel
Я пытаюсь автоматически создать отформатированный отчет Word из шаблона Excel, используемого несколькими командами. Например, если у меня есть следующая структура Excel:
...... A.... |..... B.... |.... C...
1 Имя | Высота | Вес
2 Джейсон | 74 | 170
3 Грег | 70 | 160
4 Сам | 71 | 200
и я хочу извлечь эти данные и отформатировать в файл Word в следующем формате:
2.1 Джейсон
Высота: 74
Весят: 170
2.2 Грег
Высота: 70
Вес: 160
2.3 Сэм
Высота: 71
Вес: 200
Есть ли быстрый способ сделать это с VBA и иметь возможность перебирать столько строк, сколько может существовать в любом конкретном файле Excel? (может варьироваться от нескольких до многих сотен) Настоящий файл Excel содержит около десятка столбцов, в которых для каждой записи (строки) необходимо извлекать и форматировать данные с использованием стандартного шаблона (размер / цвет шрифта, отступ, выравнивание и т. д.)...) но я хотел бы просто заставить экстракт работать, и я могу поиграть с форматированием позже.
Для справки я попытался исследовать известные решения, но большинство из них сосредоточены на именных закладках и относительно статическом контенте, а не на динамическом количестве строк и анализе одинаковых данных для каждой из них.
1 ответ
Если вы в конечном итоге используете VBA, вы можете использовать приведенный ниже код, начиная с текстового документа. Убедитесь, что Ссылка для библиотеки объектов Microsoft Excel XX включена в Инструменты> Ссылки в VBE.
Точно так же, вы знаете, что часть, где он помещает строки в Word, могла бы быть написана лучше. Word - мой самый слабый из всех продуктов MS Office с точки зрения знаний.
Sub XLtoWord()
Dim xlApp As Excel.Application
'Set xlApp = CreateObject("Excel.Application")
Set xlApp = GetObject(, "Excel.Application") '-> assumes XL is open, if not use CreateObject
Dim wkb As Excel.Workbook
Set wkb = xlApp.Workbooks("Book5.xlsm") '-> assumes xl is open, if not use .Workbooks.Open(filename)
Dim wks As Excel.Worksheet
Set wks = wkb.Sheets(1) '-> assumes data is in sheet 1
With wks
Dim lngRow As Long
lngRow = .Range("A" & .Rows.Count).End(xlUp).Row
Dim cel As Excel.Range
Dim i As Integer
i = 1
For Each cel In .Range("A2:A" & lngRow) 'assumes data is filled from top left cell of A1 including headers
strLabel = "2." & i & " " & cel.Text
strHeight = "Height " & cel.Offset(, 1).Text
strWeight = "Weight " & cel.Offset(, 2).Text
Dim myDoc As Word.Document
Set myDoc = ThisDocument
myDoc.Range.InsertParagraphAfter
myDoc.Range.InsertAfter strLabel & Chr(11) & strHeight & Chr(11) & strWeight
i = i + 1
Next
End With
End Sub