控制文件结构

时间:2017-12-05 11:48:54

标签: vba ms-word word-vba

我有一份文件,其中存储了有关产品的信息。每个章节里面都有一个小表,有三行:PriceDescriptionImage。以下是它的外观:

enter image description here

我想更改所有这些表中的行顺序。或者,我想为每个行添加一行。所以期望的结果应该是:

enter image description here

解释它如何起作用:

  • 我们需要一个数据库(Access / Excel / CSV)来存储每个产品的信息:

    enter image description here

  • 我们需要以某种方式告诉Word以哪种顺序显示行。我在这附近发现了一些东西:

    https://msdn.microsoft.com/en-us/library/office/jj889465.aspx - 请参阅"哈利波特"和"学习XML"。

  • 然后我们需要将其插入Word中。字段是我想到的第一件事:

    Product A
    
    { InsertProduct A }
    
    Product B
    
    { InsertProduct B }
    

我不明白如何做到这一点。仅使用VBA?使用自定义内容控件?我是否需要将Excel / Access连接到此文档?

1 个答案:

答案 0 :(得分:1)

在Excel工作表中构建数据会更容易,而不是在Word文档中。因此,我的第一个建议是从客户端或其他部门请求您的合作伙伴在Excel中为您提供数据。如果无法执行,则可以将表格从MS Word复制到MS Excel。让我们假设,表格就像您展示的那样,每个人都有产品名称。我已经为你调整了一个宏:

Sub CopyTablesFromWord()
    Dim wdApp As Object
    Dim docFile As Object
    Dim tbl As Object
    Dim rngToCopy As Range
    Dim cl As Object
    Dim wdRow As Object
    Dim wdCell As Object
    Dim i As Long, j As Long
    Dim ws As Worksheet
    Dim tblRw As Object, tblCl As Object

    Set wdApp = GetObject(, "Word.Application")
    Set docFile = wdApp.Documents(1)
    Set ws = ActiveWorkbook.Worksheets.Add

    For Each tbl In docFile.Tables
        Set rngToCopy = ws.Range("A" & ws.Cells.Rows.Count).End(xlUp).Offset(1, 0)
        With rngToCopy
            .Value = "Product"
            .Offset(, 1).Value = tbl.Cell(1, 1).Range.Previous.Paragraphs(1).Range
            Set rngToCopy = .Offset(1)
        End With

        i = 1
        For Each tblRw In tbl.Rows
            j = 1
            For Each tblCl In tblRw.Cells
                rngToCopy.Offset(i - 1, j - 1).Value = tbl.Rows(i).Cells(j).Range
                j = j + 1
            Next tblCl
            i = i + 1
        Next tblRw

    Next tbl

End Sub

此宏从Word文档中读取所有表并将它们复制到Excel工作簿。 注意,我假设产品名称在每个表之前只有一行。您可能需要修改此宏以用于您的目的。由于您在电子表格中有数据,您可以使用另一个子例程来查看产品名称,价格,描述或其他任何内容,并将它们添加到您的表或数据库中。

我无法告诉你如何为此增加数量,因为我不知道你从哪里拿来的。

相关问题