Как создать отформатированный отчет 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
Другие вопросы по тегам