首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VBScript中解析word文档

在VBScript中解析word文档
EN

Stack Overflow用户
提问于 2015-03-15 07:58:05
回答 1查看 1.9K关注 0票数 0

我从一个朋友那里得到了一个奇怪的任务,就是解析一堆单词文件,并将其中的某些部分写到文本文件中进行进一步的处理。

VBscript不是我喜欢的一杯茶,所以我不知道该如何把这些东西装在一起。

这些文件如下所示:

代码语言:javascript
复制
Header
A lot of not interesting text
Table
Header
More boring text
Table

我想解析这些文档,并从其中获取所有的标题和目录。我正在逐步浏览这份文档

代码语言:javascript
复制
For Each wPara In wd.ActiveDocument.Paragraphs

我想我知道如何得到标题

代码语言:javascript
复制
If Left(wPara.Range.Style, Len("Heading")) = "Heading" Then

但我不知道该怎么做

代码语言:javascript
复制
Else if .. this paragraph belongs to a table..

因此,任何关于如何判断段落是否是表的一部分的提示都会很好。

EN

回答 1

Stack Overflow用户

发布于 2015-03-15 12:08:48

未经测试,因为我现在无法访问MS Word。

代码语言:javascript
复制
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是您自己实现的东西。

由于"is in table“自然被定义为”对象的父级是表“,这是使用递归(进一步解构)的完美情况:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29058477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档