获取Word文档特定部分中的段落

时间:2011-05-09 11:40:28

标签: perl ms-word ole

我在查找单词中的特定部分时遇到问题。建议我尝试在Word中查看VB对象浏览器以获取帮助。我知道至少有5个标题“集合”(如果您查看文档图,我会看到编号为1,2,3,4,5 ......)。我不知道如何导航到第五个标题,最初我认为它是部分,但是当我查看部分时,我意识到几乎所有部分都在一个部分中,但是如果有人正在寻找有关如何进行部分的信息,下面似乎有效,因为我已经经历了编写它的麻烦。

my($document) = $Word->Documents->Open($input) || die("Unable to open document ", Win32::OLE->LastError());
my $section = $document->{Sections}->Item(1); # put section number you're looking for in here
$section_five_paragraphs = $section->{Range}->Paragraphs();
$enumerate = new Win32::OLE::Enum($section_five_paragraphs); 
  while (defined($paragraph = $enumerate->Next()))
  {
     print $paragraph->{Range}->{Text} . "\n";
  }

那么有谁知道如何到达这个第5个标题区域,或者可以指出一些可能有用的东西?

1 个答案:

答案 0 :(得分:2)

告诉我,如果我没有正确地关注你,但你想在某个部分找到第5个标题1?如果是这种情况,虽然Word明确定义了部分(您注意到$ document-> {Sections} - > Item(1)),但它并没有明确定义特定或样式的标题。为此,你必须经历所有寻找感兴趣的风格。以下VBA代码(我为不写perl而道歉)就是这样,并且仅在特定部分中查找。

Sub FindHeading1()
    On Error GoTo MyErrorHandler

    Dim currentDocument As Document
    Set currentDocument = ActiveDocument

    Dim findRange As Range
    Set findRange = currentDocument.Sections(2).Range 'which section you want

    Dim endRange As Long
    endRange = findRange.end

    findRange.Find.ClearFormatting
    findRange.Find.Style = ActiveDocument.Styles("Heading 1")

    Dim headingCountFound As Long
    Do While findRange.Find.Execute(FindText:="")
        If findRange.End > endRange Then Exit Sub
        findRange.Select
        headingCountFound = headingCountFound + 1
        If headingCountFound = 3 Then 'which occurance you want
            MsgBox "Found."
            Exit Do
        End If

        DoEvents
    Loop

    Exit Sub

MyErrorHandler:
    MsgBox "FindHeading1" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description
End Sub