X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExcel%2FTemplate%2FContainer%2FWorksheet.pm;h=03be2f1a6486a721dc29f07ee06820758c838e57;hb=HEAD;hp=c7077796468c55ed94f7e4e18696b4a63e217bbe;hpb=d0eafc11b999be05367693c7d16879a83d3f2d19;p=p5sagit%2FExcel-Template.git diff --git a/lib/Excel/Template/Container/Worksheet.pm b/lib/Excel/Template/Container/Worksheet.pm index c707779..03be2f1 100644 --- a/lib/Excel/Template/Container/Worksheet.pm +++ b/lib/Excel/Template/Container/Worksheet.pm @@ -9,12 +9,45 @@ BEGIN { use Excel::Template::Container; } -sub render -{ +sub exit_scope { $_[1]->active_worksheet(undef) } + +sub render { my $self = shift; my ($context) = @_; - $context->new_worksheet($self->{NAME}); + my $worksheet = $context->new_worksheet($self); + + my $password = $context->get( $self, 'PROTECT' ); + if ( defined $password ) { + $worksheet->protect($password); + } + + $worksheet->keep_leading_zeros(1) + if $context->mark('keep_leading_zeros'); + + if ( $context->get( $self, 'LANDSCAPE' ) && !$self->{PORTRAIT} ) { + $worksheet->set_landscape; + } elsif ( $context->get( $self, 'PORTRAIT' ) ) { + $worksheet->set_portrait; + } + + + my $hide_gridlines = $context->get( $self, 'HIDE_GRIDLINES'); + + if ( defined $hide_gridlines ) { + $worksheet->hide_gridlines( $hide_gridlines ); + } + + my $autofilter = $context->get( $self, "AUTOFILTER"); + if ( defined $autofilter ) { + if ($autofilter =~ /^\D/) { + $worksheet->autofilter($autofilter); + }else{ + $autofilter =~ s/ //g; + my ($row1, $col1, $row2, $col2) = split(',',$autofilter); + $worksheet->autofilter($row1, $col1, $row2, $col2); + } + } return $self->SUPER::render($context); } @@ -46,7 +79,75 @@ Excel::Template::Container This is the name of the worksheet to be added. -=back 4 +=item * PROTECT + +If the attribute exists, it will mark the worksheet as being protected. Whatever +value is set will be used as the password. + +This activates the HIDDEN and LOCKED nodes. + +=item * KEEP_LEADING_ZEROS + +This will change the behavior of the worksheet to preserve leading zeros. + + +=item * HIDE_GRIDLINES + +his method is used to hide the gridlines on the screen and printed page. +Gridlines are the lines that divide the cells on a worksheet. Screen and printed gridlines are +turned on by default in an Excel worksheet. If you have defined your own cell +borders you may wish to hide the default gridlines. + +$worksheet->hide_gridlines(); + +The following values of $option are valid: + + 0 : Don't hide gridlines + 1 : Hide printed gridlines only + 2 : Hide screen and printed gridlines + +If you don't supply an argument or use undef the default option is 1, i.e. only the printed gridlines are hidden. + +=item * LANDSCAPE + +This will set the worksheet's orientation to landscape. + +=item * PORTRAIT + +This will set the worksheet's orientation to portrait. + +While this is the default, it's useful to override the default at times. For +example, in the following situation: + + + + ... + + ... + + ... + + +In that example, the first and third worksheets will be landscape (inheriting +it from the workbook node), but the second worksheet will be portrait. + +=item * AUTOFILTER + +With these attribute, you can add the autofilter to a worksheet. An autofilter is a +way of adding drop down lists to the headers of a 2D range of worksheet data. +This is turn allow users to filter the data based on simple criteria so that +some data is shown and some is hidden. + +Example to add an autofilter to a worksheet: + + + + + +=back =head1 CHILDREN @@ -71,7 +172,7 @@ In the above example, the children will be executed in the context of the =head1 AUTHOR -Rob Kinyon (rkinyon@columbus.rr.com) +Rob Kinyon (rob.kinyon@gmail.com) =head1 SEE ALSO