我在查找单词中的特定部分时遇到问题。建议我尝试在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个标题区域,或者可以指出一些可能有用的东西?
答案 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