【问题标题】:Finding table caption in Word VBA在 Word VBA 中查找表格标题
【发布时间】:2012-01-27 23:04:50
【问题描述】:

我想自动从 Word 文档的表格中提取数据。我通过遍历 VBA 中的所有表来做到这一点。即

For Each tbl In wdDoc.Tables
Next

是否可以找到给定表格的标题?即文件有 “表 3:”,然后是表。

请注意,并非文档中的所有表格都有标题,因此标题中的表格编号与文档表格枚举不同。

感谢任何帮助。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    不幸的是,表格标题实际上并没有通过 Word 对象模型与其表格相关联。创建表格标题时,它只是放置在单独的段落对象中的文本。

    所以,简短的回答是不,没有好的方法可以找到给定表格的标题。

    不过,我确实编写了一些可能对您有所帮助的代码。它基本上遍历文档中的所有 Paragraph 对象并查找“Caption”样式(或者,您可以查找格式为“Table #:”的文本,或任何您想要的)。如果下一个段落包含表格,它会将标题文本放入找到的第一个表格的第一个单元格中。

        Dim p As Paragraph
        Dim lastParagraphWasCaption As Boolean
        Dim lastCaptionText As String
        lastParagraphWasCaption = False
    
        For Each p In ActiveDocument.Paragraphs
            If lastParagraphWasCaption And p.Range.Tables.Count > 0 Then
                p.Range.Tables(1).Cell(1, 1).Range.Text = lastCaptionText
            End If
    
            If p.Range.Style = "Caption" Then
                lastParagraphWasCaption = True
                lastCaptionText = p.Range.Text
            Else
                lastParagraphWasCaption = False
            End If
        Next
    

    请记住,这只是一个示例,说明如何将标题与其表格联系在一起。话虽如此,这不是一个非常可靠的方法,除非您绝对需要,否则我不建议使用它,因为表格标题可能没有标题样式,或者可能有标题样式不是标题等。

    【讨论】:

    • 谢谢(+1);这符合我的期望和恐惧......我会再看看我会用这个做什么!
    • 我确实发现了一些问题。 for each 还可以在表格中查找段落。而且我的一些文档在表格中具有“标题样式”(讨厌)。我已经过滤掉了,但是逐段迭代比基于表的迭代要慢得多。
    • 可能有一个技巧可以做得更好:Table1.Select() 然后使用 Selection.MoveUp Unit:=wdLine, Count:=1 之类的东西向上移动 1,这会将光标放在正上方桌子。但是,它没有让我得到表格之前的段落,这正是我正在寻找的。想法?
    • 不幸的是,段落迭代当然总是会变慢,因为文档中每个对象的迭代而不是表格。你这个想法的基本前提是我的第一直觉——遍历表格并找到前一段(可能带有标题格式)。如果我有时间,我会尝试调查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2019-04-16
    相关资源
    最近更新 更多