4

我正在尝试从多个团队使用的 Excel 模板自动构建格式化的 Word 报告。例如,如果我有以下 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 Sam
身高:71
体重:200

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

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

4

1 回答 1

1

如果您最终使用 VBA,您可以使用以下从 word 文档开始的代码。确保在 VBE 中的工具 > 参考下签入 Microsoft Excel XX 对象库的参考。

正如您所知,将字符串放入 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
于 2012-10-22T20:40:53.167 回答