Peter,

OLE needs Variant values.  Perl and the OLE modules will convert most of 
these on he fly for you, but sometimes I find I have a need to convert 
booleans explicitly.

my $false = Win32::OLE::Variant->new(VT_VARIANT, 0);
my $true = Win32::OLE::Variant->new(VT_VARIANT, 1);

Mark

On 9/12/2010 4:43 PM, 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.
>
> 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
> _______________________________________________
> Perl-Win32-Users mailing list
> Perl-Win32-Users@listserv.ActiveState.com
> To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to