ZJ.Mike.2009 has asked for the wisdom of the Perl Monks concerning the following question:
Say the test.doc contains the word 'perl' in page 1. The following code finds the word correctly but not the page number.
Can someone give me some hints? Thanks :)==UPDATE==use strict; use warnings; use Win32::OLE::Const 'Microsoft Word'; my $query = 'perl'; my $file = "E:/test.doc"; my $Word = Win32::OLE->new('Word.Application', 'Quit'); $Word->{'Visible'} = 0; my $doc = $Word->Documents->Open($file) or die "Error opening the docu +ment!\n"; my $paragraphs = $doc->Paragraphs() ; my $enumerate = new Win32::OLE::Enum($paragraphs); while ( defined (my $paragraph = $enumerate->Next()) ) { my $words = Win32::OLE::Enum->new( $paragraph->{Range}->{Words} ); while ( defined ( my $word = $words->Next() ) ) { my $text = $word->{Text}; if ($text =~ /$query/){ #$text->Select; $Doesn't work $paragraph->Select; #wrong page number. my $page_number = $Word->Selection->Information(wdActi +veEndPageNumber); print "Found $text in Page $page_number!\n"; + } } } $Word->ActiveDocument->Close ; $Word->Quit;
Problem Solved
I've just found that by replacing the $paragraph->Select line with $word->Select , the code seems to be able to find the correct page number :)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Find occurence information on a word in a doc file using Win32::OLE
by Generoso (Prior) on Jun 08, 2011 at 15:32 UTC | |
by Generoso (Prior) on Jun 08, 2011 at 18:16 UTC | |
by ZJ.Mike.2009 (Scribe) on Jun 09, 2011 at 02:31 UTC |