我从朋友那里得到了一个奇怪的任务,解析了一堆Word文件,并将它们的某些部分写入文本文件以供进一步处理。
VBscript不是我的一杯茶,所以我不确定如何将这些碎片放在一起。
文件如下:
Header
A lot of not interesting text
Table
Header
More boring text
Table
我想解析文档并从中获取所有标题和目录。我带着
步进文档For Each wPara In wd.ActiveDocument.Paragraphs
而且我想我知道如何获取标题
If Left(wPara.Range.Style, Len("Heading")) = "Heading" Then
但我不确定如何做
Else if .. this paragraph belongs to a table..
所以,任何关于我如何确定一个段落是否是表的一部分的提示都会很好。
答案 0 :(得分:1)
未经测试,因为我现在无法访问MS Word。
Option Explicit
Dim FSO, Word, textfile, doc, para
' start Word instance, open doc ...
' start FileSystemObject instance, open textfile for output...
For Each para In doc.Paragraphs
If IsHeading(para) Or IsInTable(para) Then
SaveToFile(textfile, para)
End If
Next
Function IsHeading(para)
IsHeading = para.OutlineLevel < 10
End Function
Function IsInTable(para)
Dim p, dummy
IsInTable = False
Set p = para.Parent
' at some point p and p.Parent will both be the Word Application object
Do While p Is Not p.Parent
' dirty check: if p is a table, calling a table object method will work
On Error Resume Next
Set dummy = obj.Cell(1, 1)
If Err.Number = 0 Then
IsInTable = True
Exit Do
Else
Err.Clear
End If
On Error GoTo 0
Set p = p.Parent
Loop
End Function
显然SaveToFile
是您自己实施的内容。
因为&#34;在表格中#34;自然地被定义为&#34;对象的父亲是一个表&#34;,这是一个使用递归的完美情况(解构得更远):
Function IsInTable(para)
IsInTable = IsTable(para.Parent)
If Not (IsInTable Or para Is para.Parent) Then
IsInTable = IsInTable(para.Parent)
End If
End Function
Function IsTable(obj)
Dim dummy
On Error Resume Next
Set dummy = obj.Cell(1, 1)
IsTable = (Err.Number = 0)
Err.Clear
On Error GoTo 0
End Function