Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: MSWord and OLE

by cacharbe (Curate)
on Aug 06, 2002 at 11:55 UTC ( [id://187992]=note: print w/replies, xml ) Need Help??


in reply to MSWord and OLE

I guess there a few different ways you can attack this. First let's get all the basic stuff out of the way.
use strict; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Word'; $Win32::OLE::Warn = 3; # Die on Errors my $Word = Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application', 'Quit'); $Word->Documents->Add || die("Unable to create document ", Win32::OLE- +>LastError()); my @Data = ("Data ONE", "Data TWO", "Data THREE" , "Data FOUR");
Those are some necessary Evils, but always important to include.

If you just want to add plain header text, and then add a table below it, I would do this:

$Word->Selection->TypeText ({ Text => "This is plain header text"}); $MyRange->Collapse({Direction=>wdCollapseEnd}); $Word->Selection->TypeText ({ Text => "\n\n" }); #add the table 2 li +nes below $Word->Selection->MoveDown({Count => 2});
If you want TABLE headers, you might want to try something like what follows. If not, just use the text above, and the table creation method from below and add your data:
my @headers = ("Header ONE", "Header TWO", "Header THREE" , "Header FOUR"); my $MyRange = $Word->ActiveDocument->Content; # Add a table at the end of the content. $Word->ActiveDocument->Tables->Add({ Range => $MyRange, NumRows => 1, NumColumns => ($#headers+1), }); #put headers In foreach my $str (0..$#headers){ my $Cell = $Word->ActiveDocument->Tables(1)->Cell(1,($str+1))->Sel +ect; $Word->Selection->TypeText ({ Text => $headers[$str]}); } #Do some simple styling with the header row. my $Row = $Word->ActiveDocument->Tables(1)->Rows(1); $Row->Shading->{BackgroundPatternColor} = wdColorGray40; my @borders = (wdBorderBottom, wdBorderTop, wdBorderLeft, wdBorderRigh +t); foreach my $bord (@borders){ with (my $Borders = $Row->Borders->Item($bord), LineStyle=>wdLineStyleSingle, LineWidth=>wdLineWidth300pt);} my $table = $Word->ActiveDocument->Tables(1); my $lastrow = $table->Rows->{Count}; # Put the data in, based on the number of header columns while ($lastrow < 15){ my $color; $table->Rows($lastrow)->Select(); $Word->Selection->InsertRowsBelow(1); $lastrow++; my $test = $lastrow%2; if (!$test){$color = wdColorWhite;}else{$color = wdColorGray40;} $Word->ActiveDocument->Tables(1)->Rows($lastrow)->Shading->{Backgr +oundPatternColor} = $color; foreach my $str (0..$#headers){#put Headers In my $Cell = $Word->ActiveDocument->Tables(1)->Cell($lastrow,($s +tr+1))->Select; $Word->Selection->TypeText ({ Text => $Data [$str]}); } } with (my $Borders = $Row->Borders->Item(wdBorderBottom), LineStyle=>wdLineStyleSingle, LineWidth=>wdLineWidth300pt); my $Doc= $Word->{ActiveDocument}; $Doc->SaveAs('c:\perl\projects\testtable.doc');

C-.

---
Flex the Geek

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://187992]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2024-04-24 08:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found