From 2d06ee894a3e5cd139bde1a88095c33772283e99 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 28 Aug 2013 15:16:28 +0000 Subject: merge now supports formulas, and adjusted test --- lib/Spreadsheet/Template/Helpers/Xslate.pm | 22 +++++++++++++++------- lib/Spreadsheet/Template/Writer/Excel.pm | 30 +++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/Spreadsheet/Template/Helpers/Xslate.pm b/lib/Spreadsheet/Template/Helpers/Xslate.pm index d4238e9..bf9b435 100644 --- a/lib/Spreadsheet/Template/Helpers/Xslate.pm +++ b/lib/Spreadsheet/Template/Helpers/Xslate.pm @@ -32,13 +32,21 @@ sub format { } sub merge { - my ($package, $range, $contents, $format) = @_; - - return $JSON->encode({ - range => "$range", - contents => "$contents", - format => _formats($package, $format) - }); + my ($package, $contents, $format, $type, $range, %args) = @_; + + return $JSON->encode( + { + contents => "$contents", + format => _formats( $package, $format ), + type => $type, + range => "$range", + ( + defined $args{formula} + ? ( formula => $args{formula} ) + : () + ), + } + ); } sub c { diff --git a/lib/Spreadsheet/Template/Writer/Excel.pm b/lib/Spreadsheet/Template/Writer/Excel.pm index da54cea..d24b3ae 100644 --- a/lib/Spreadsheet/Template/Writer/Excel.pm +++ b/lib/Spreadsheet/Template/Writer/Excel.pm @@ -153,24 +153,36 @@ sub _write_worksheet { } } - if (exists $data->{merge}) { - for my $i (0..$#{ $data->{merge} }) { - my $merge = $data->{merge}[$i]; + if ( exists $data->{merge} ) { + for my $i ( 0 .. $#{ $data->{merge} } ) { + my $merge = $data->{merge}[$i]; my $format = $merge->{format}; my $format_obj; - if (exists $self->_formats->{$format}) { - $format_obj = $self->_formats->{$format}; + if ( exists $self->_formats->{$format} ) { + $format_obj = $self->_formats->{$format}; } else { $format_obj = $self->excel->add_format(%$format); $self->_formats->{$format} = $format_obj; } - $sheet->merge_range($merge->{range}, $merge->{contents}, $format_obj); + + $merge->{type} = 'formula' if defined $merge->{formula}; + + $sheet->merge_range_type( + $merge->{type}, + $merge->{range}, + defined $merge->{formula} + ? $merge->{formula} + : $merge->{contents}, + $format_obj, + defined $merge->{formula} ? $merge->{contents} : () + ); } } - if (exists $data->{autofilter}) { - my @autofilter = @{$data->{autofilter}}; - $sheet->autofilter($autofilter[0], $autofilter[1], $autofilter[2], $autofilter[3]); + if ( exists $data->{autofilter} ) { + my @autofilter = @{ $data->{autofilter} }; + $sheet->autofilter( $autofilter[0], $autofilter[1], $autofilter[2], + $autofilter[3] ); } } -- cgit v1.2.3-54-g00ecf