如何从多行/列Excel电子表格生成格式化的Word报告

时间:2012-10-22 19:43:51

标签: excel vba ms-word auto-generate word-template

我正在尝试从多个团队使用的Excel模板中自动构建格式化的Word报告。例如,如果我有以下Excel结构:

...... A .... | ..... B .... | .... C ...
1 名称 | 高度 |的重量
2杰森| 74 | 170个
3格雷格| 70 | 160个
4 Sam | 71 | 200

我希望将这些数据和格式化为Word文件,格式如下:

2.1 Jason
身高:74
重量:170

2.2格雷格
身高:70
重量:160

2.3萨姆 身高:71
重量:200

有没有一种快速的方法可以使用VBA并且能够遍历任何特定Excel文件中可能存在的行数? (可能从几个到几百个不等)真正的excel文件包含大约十二列,每个记录(行)需要使用标准模板(字体大小/颜色,缩进,对齐等)拉出和格式化数据。 ..)但我喜欢让提取物工作,我可以稍后使用格式化。

作为参考,我试图研究已知的解决方案,但大多数都集中在命名的书签和相对静态的内容上,而不是通过动态行数进行交互,并为每个行解析相同的数据。

1 个答案:

答案 0 :(得分:1)

如果您最终使用VBA,可以从word文档开始使用以下代码。确保在Tools>下签入了Microsoft Excel X.X对象库参考。 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