Получить абзацы в определенном разделе документа Word

У меня проблемы с поиском определенного раздела в Word. Мне было рекомендовано попробовать просмотреть VB Object Browser в Word для получения помощи. Я знаю, что есть как минимум 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-й области заголовка, или может указать мне на что-то, что может помочь?


person onaclov2000    schedule 09.05.2011    source источник
comment
Я не буду отвечать на этот вопрос, но я только что провел поиск по абзацам, пока не нашел 5. ‹текст заголовка›, к счастью, большинство из них кажутся одними и теми же заголовками в нескольких документах, однако я все же предпочел бы перейти к 5-й заголовок 1, если кто-то может ответить буду признателен.   -  person onaclov2000    schedule 11.05.2011


Ответы (1)


Скажите, если я не правильно вас понял, но вы пытаетесь найти 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
person ForEachLoop    schedule 06.06.2011
comment
Похоже, это может сработать, возможно, я смогу перевести это на Perl, когда у меня будет время снова взглянуть на это, я вернусь и сообщу вам, если вы решили мою проблему! - person onaclov2000; 06.06.2011