Peter Buck <> wrote:
>   Does anyone have an example of a perl script acting on MS Word
> documents using Win32::OLE and Selection.Find.Execute?  I have read
> the  
> Win32 man page but its examples for Excel and Access don't help.  I
> found a Powershell script that does what I want but can't translate.
> The parts I'm confused on are (1) setting the parameters used in the
> Selection.Find.Execute() invocation (particularly the boolean values,
> since perl doesn't do booleans) and the actual invocation of
> Selection.Find.Execute().  
> 
> I did find an example using $search-> Execute() but this doesn't
> appear to allow setting all the parameters that
> Selection.Find.Execute() does.  
> Also, it operates on $doc-> Content->Find while
> Selection.Find.Execute() operates on $doc->Selection (if I'm right). 
> And I'm using Homekey(6) to take me to the top of the document, which
> is linked to Selection and doesn't seem to work in my
> $doc->Content->Find attempts.    
> 
> Any help or direction to documentation much appreciated.

The primary documentation for OLE apps is the Visual Basic Reference.
The OLE browser supplied with Activestate Perl is also very useful, I
find. Other than that, googling for examples can be useful, followed by
an amount of trial and error. The amount of trial and error needed will
depend on how closely the results of your googling match what you are
trying to do.

> 
> Thanks - Toolsmith
> 
> # ExpandAcronyms.ps1
> # read acronym list, expand acronyms in target MS Word document #
> syntax: ExpandAcronyms wordDocument 
> 
> function make-change {
>      $FindText = $args[0]
>      $FullText = $args[1]
>      $ReplaceText = "$FullText ($FindText)"
> 
>      $ReplaceAll = 1
>      $FindContinue = 1
>      $MatchCase = $True
>      $MatchWholeWord = $True
>      $MatchWildcards = $False
>      $MatchSoundsLike = $False
>      $MatchAllWordForms = $False
>      $Forward = $True
>      $Wrap = $FindContinue        # don't want it wrapping, wish I
> knew 
> what this meant
>      $Format = $False
> 
>      $objWord.Selection.HomeKey(6) > Null
>      $result = $objSelection.Find.Execute($FindText,$MatchCase,
>          $MatchWholeWord,$MatchWildcards,$MatchSoundsLike,
>          $MatchAllWordForms,$Forward,$Wrap,$Format,
>          $ReplaceText,$ReplaceAll)
>       if ( $result -eq $true ) {
>           "$Findtext|$FullText"
>      }
> 
> }
> 
> if ( $args.count -lt 1 ) {
>      cd $env:temp
>      $strWordFile = [string](resolve-path(Read-Host "Enter Path of
>      Word file to be processed")) } else { $strWordFile =
> [string](resolve-path($args[0])) } 
> 
> 
> $objWord = New-Object -ComObject word.application
> $objWord.Visible = $True
> $objDoc = $objWord.Documents.Open($strWordFile)
> 
> $objSelection = $objWord.Selection
> 
> $d = get-content "d:/temp/acronyms.txt"        # read file of acronym
> | 
> definition
> foreach ( $l in $d ) {
>      ($acro, $def) = $l.split('|')                        # build
> array 
> of acronym, definition
>      make-change $acro $def
> }
> "Finished"
> $objWord.Selection.HomeKey(6) > Null

That looks like shell script rather than Perl (Powershell perhaps?).
Your Perl code would have been more useful.

HTH

-- 
Brian Raven 
 
Please consider the environment before printing this e-mail.

This e-mail may contain confidential and/or privileged information. If you are 
not the intended recipient or have received this e-mail in error, please advise 
the sender immediately by reply e-mail and delete this message and any 
attachments without retaining a copy.

Any unauthorised copying, disclosure or distribution of the material in this 
e-mail is strictly forbidden.
_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to