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

5

我希望有人能帮忙写一个MS Word宏。

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

文件格式类似于:

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

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

然后遍历它以识别文件名。有了文件名,我就可以打开文件,转到页码并复制所需数据。

但是我卡在第一步,如何在MS Word宏中捕获该行到一个字符串中?

任何帮助都将不胜感激。

4个回答

6
以下代码可以帮助您开始编写:
```

下面的代码应该能让您入门:

```
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

我在这篇文章中找到了基本算法。


这将把文档分成段落。如果您想要按句子进行操作,请每行执行此操作(即句子)。请查看下面的答案。 - Anonymous Type

3
如果您的Word文档列出所有文本文件如下:
<name>{tab}<page ref>{newline}
<name>{tab}<page ref>{newline}
<name>{tab}<page ref>{newline}

然后所有的行都可以在段落集合中找到。您可以使用简单的For Each循环遍历它们:

Dim p As Paragraph

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

1
如果您对对象进行更改,则“ForEach”可能会出现问题,它可能会永远卡在同一个元素上,因此我不得不使用索引变量。 - PhilHibbs
非常正确,如果您更改正在迭代的集合(删除或添加新段落),那么会发生奇怪的事情。在这种情况下,使用索引循环也可能失败。 - Tomalak

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接