在VBScript中解析word文档

时间:2015-03-15 07:58:05

标签: vbscript

我从朋友那里得到了一个奇怪的任务,解析了一堆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..

所以,任何关于我如何确定一个段落是否是表的一部分的提示都会很好。

1 个答案:

答案 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