in reply to MSWord and OLE
Those are some necessary Evils, but always important to include.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");
If you just want to add plain header text, and then add a table below it, I would do this:
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:$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});
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
|
|---|