【发布时间】:2012-01-27 23:04:50
【问题描述】:
我想自动从 Word 文档的表格中提取数据。我通过遍历 VBA 中的所有表来做到这一点。即
For Each tbl In wdDoc.Tables
Next
是否可以找到给定表格的标题?即文件有 “表 3:”,然后是表。
请注意,并非文档中的所有表格都有标题,因此标题中的表格编号与文档表格枚举不同。
感谢任何帮助。
【问题讨论】:
我想自动从 Word 文档的表格中提取数据。我通过遍历 VBA 中的所有表来做到这一点。即
For Each tbl In wdDoc.Tables
Next
是否可以找到给定表格的标题?即文件有 “表 3:”,然后是表。
请注意,并非文档中的所有表格都有标题,因此标题中的表格编号与文档表格枚举不同。
感谢任何帮助。
【问题讨论】:
不幸的是,表格标题实际上并没有通过 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
请记住,这只是一个示例,说明如何将标题与其表格联系在一起。话虽如此,这不是一个非常可靠的方法,除非您绝对需要,否则我不建议使用它,因为表格标题可能没有标题样式,或者可能有标题样式不是标题等。
【讨论】: