使用VBA解析MS Word文档中的文本

时间:2009-04-16 16:41:32

标签: vba parsing ms-word word-vba

我希望有人能帮助MS Word宏。

基本上,我有一个MS Word文档,列出了每个文件中的几个文本文件和特定页面。

文件格式类似于:

textdocument1.txt              P. 6, 12 - issue1
textdocument2.txt              P. 5 - issue1
                               P. 13, 17 - issue3
textdocument3.txt              P. 10

我想将每一行作为字符串读入我的宏。

然后遍历它以识别文件名。使用文件名,我可以打开文件,转到页码,然后复制我需要的数据。

但是我坚持第1步,如何将该行捕获到MS Word宏中的字符串中?

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

以下代码可以帮助您入门:

Public Sub ParseLines()
    Dim singleLine As Paragraph
    Dim lineText As String

    For Each singleLine In ActiveDocument.Paragraphs
        lineText = singleLine.Range.Text

        '// parse the text here...

    Next singleLine
End Sub

我在this article中找到了基本算法。

答案 1 :(得分:3)

如果您的word文档列出了所有文本文件:

<name>{tab}<page ref>{newline}
<name>{tab}<page ref>{newline}
<name>{tab}<page ref>{newline}

然后Paragraphs collection中的所有行都可用。您可以使用简单的For Each循环遍历:

Dim p As Paragraph

For Each p In ActiveDocument.Paragraphs
  Debug.Print p.Range.Text
Next p

答案 2 :(得分:2)

每行

Public Sub ParseDoc()

    Dim doc As Document
    Set doc = ActiveDocument
    Dim paras As Paragraphs
    Set paras = doc.Paragraphs
    Dim para As Paragraph
    Dim sents As Sentences
    Dim sent As Range
    For Each para In paras

        Set sents = para.Range.Sentences
        For Each sent In sents
            Debug.Print sent.Text
        Next

    Next

End Sub

答案 3 :(得分:0)

如果其他文本包含特殊字符或其他语言,则上面的代码将不起作用,这是我针对执行的一项任务提出的解决方案

    Dim para As Paragraph
    Dim sentence() As String
    For Each para In ActiveDocument.Paragraphs
          sentence() = Split(para.Range.Text, Chr(11))
            For i = 0 To UBound(sentence)
                  Msgbox(sentence(i))
            next i
    next