brownsofa has asked for the wisdom of the Perl Monks concerning the following question:

Hello there,
I am a bit new to Perl and set out to write my first Perl code using the Win32::OLE. I RTFM and went through the forums here. Seeing as I want to get off on the right foot to save myself pain later I noticed that code that I found lying on the floor of the Internet worked but some other code I found here (http://perlmonks.thepen.com/198045.html) that resembled the MSDN way (within this MSDN link) did not. The method in question is the "typetext" way of inserting text.
Here is my code:
use strict; use Win32::OLE; use Win32::OLE::Const 'Microsoft word'; my $word = Win32::OLE->new('word.Application', ''); $word->{'Visible'} = 1; my $wordtarget = $word->Documents->add() || die("Unable to open document ", Win32::OLE->LastError()); my $range = $wordtarget->{Content}; $range->InsertAfter("InsertAfter method"); $wordtarget->TypeText("typetext method"); $range->TypeText("typetext method");

The resulting word document looks like this:
Insert After method

All other text is missing. The "typetext" way does not
work with my code (I did try to "selection() my document), but does with the code I found here and to be what microsoft is pushing.
I am using ActiveState Perl 5.6 and not the CSPAN.
Can anyone show and then push me down the right fork in
this road? Many thanks.

brownsofa

janitored by ybiC: Balanced <code> tags around codeblock, PM-ified links thusly - [http://foo.bar/bat/baz.html]

Replies are listed 'Best First'.
Re: win32::ole and word
by WhiteBird (Hermit) on Jun 07, 2004 at 04:14 UTC
    It's not clear to me what you are trying to accomplish. Are you just wanting to write text into a new word document, or are you trying to append text into an already existing document? I've used Win32::OLE before, but never these two methods.

    I find it interesting to play around with various arrangements of the code to see what results. I can get the typetext method to work if I code it like this:

    my $range = $wordtarget->{Content}; $range->InsertAfter("Insert After"); $range = $word->Selection(); $range->TypeText("typetext method");

    I notice that even though the "Insert After" is called first, the typetext text is printed first. Since I don't know what you are want to do exactly, I can't be much more help than that. Either keep playing around with what you've got, or post a little more detail. You're probably on the right track if you just keep reading the FAQs and documentation on Win32::OLE.